Algorithm

(Java) 문제 2 - 크레인 인형 뽑기

Accept 2021. 4. 21. 00:38

각각의 인형이 담긴 2차원 배열(board)과 크레인이 움직일 때마다 몇번째 칸까지 이동할지를 적어둔 1차원 배열(moves)로 크레인 인형 뽑기를 코드로 구현한 알고리즘

 

조건)

* 인형은 각각의 고유 번호를 가지고 있음

* 크레인이 이동 중 인형을 찾은 경우, 찾은 인형의 번호와 Stack 객체의 최상단의 인형 번호가 같다면 pop() 시키고, 해당 인형 번호를 0으로 변환시킴

* 위와 반대되는 경우, Stack 객체에 push() 시키고, 해당 for문을 break함.

 

public int accept(int[][] board, int[] moves) {
     int answer = 0;
     Stack<Integer> stack = new Stack<>();
     for (int pos : moves) {     // for (int j=0; j<moves.length; j++) {
         for (int i=0; i<board.length; i++) {
             if (board[i][pos-1] != 0) {
                int tmp = board[i][pos-1];
                board[i][pos-1] = 0;
                if (stack.peek() == tmp && !stack.isEmpty) {
                   stack.pop();
                   answer += 2;
                } else {
                  stack.push(tmp);
                  break;
                }
             }
         }
         return answer;
     }
}