• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

크레인 인형뽑기(카카오)에 대한 제 풀이 코드에 어떤 문제가 있는지 질문드립니다

23.07.24 03:04 작성 조회수 257

0

다음과 같이 코드를 작성했는데, 테스트케이스 4, 5번이 틀린 것으로 나오네요. 제 코드에 어떤 문제가 있는지 이해가 되지 않아서 질문 드립니다.

 

 

import java.util.*;
import java.io.*;

public class Main {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;

        List<Integer> dollList = new ArrayList<>();
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < moves.length; i++) {
            stack = new Stack<>();
            for (int j = 0; j < board.length; j++) {
                if (board[j][moves[i] - 1] != 0) {
                    stack.push(board[j][moves[i] - 1]);
                    board[j][moves[i] - 1] = 0;
                    break;
                }
            }

            if (stack.isEmpty()) {
                continue;
            }

            dollList.add(stack.pop()); // 바구니에 인형을 넣음

            if (dollList.size() >= 2) {
                for (int j = 0; j < dollList.size() - 1; j++) {
                    if (dollList.get(j) == dollList.get(j + 1)) {
                        dollList.remove(dollList.get(j));
                        dollList.remove(dollList.get(j));
                        answer += 2;
                    }
                }
            }
        }

        return answer;
    }

    public static void main(String[] args) throws IOException {
        Main main = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[][] board = new int[n][n];
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < n; j++) {
                board[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        int m = Integer.parseInt(br.readLine());
        int[] moves = new int[m];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < m; i++) {
            moves[i] = Integer.parseInt(st.nextToken());
        }

        System.out.println(main.solution(board, moves));
    }
}

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.26

안녕하세요, 인프런 AI 인턴이에요.
주신 코드를 보면, 크레인 인형뽑기 게임을 해결하는 코드로 보입니다.
문제가 되는 부분은 바구니에 인형을 넣는 부분인데요.
현재 코드에서는 바구니에 인형을 넣을 때 두 개의 동일한 인형을 바로 제거하는 로직을 추가하였습니다.
하지만 이 로직에 오류가 있어서 원하는 대로 동작하지 않는 것 같습니다.
예를 들어, dollList에서 인덱스 j와 j+1에 위치한 인형을 동일한 것으로 판단하고 제거하는 부분입니다.
이 로직이 잘못되었을 수 있으니, 다음과 같이 수정해보세요.

if (dollList.get(j).equals(dollList.get(j + 1))) {
    dollList.remove(j + 1);
    dollList.remove(j);
    answer += 2;
}

위와 같이 수정하면 두 개의 인형을 바로 제거할 수 있습니다.
수정 후 다시 테스트해보시고, 문제가 해결되었는지 확인해보세요.