알고리즘

[알고리즘] 프로그래머스 크레인 인형뽑기 게임 자바 JAVA 스택

행복하개! 2020. 11. 3. 02:23

 

 

 

일단 인형을 건져올려서 바구니에 담는 것은 쉽다. moves의 순서대로 board라는 2차원 배열에 해당 열에만 차례대로 0이 아닌걸 찾아내면 된다. 만약 0이면 바구니에 안담고 넘어가면 끝.

 

다만 바구니를 Array로 할 것인지, ArrayList로 할 것인지, Stack으로 할 것인지는 기호(?)에 따라 하면 되지만 Stack이 제일 알맞은 것 같다.

 

 

 

리스트로 구현한 코드 :

    public static int solution(int[][] board, int[] moves) {
        int answer = 0;
        List<Integer> basket = new ArrayList<>();

        for (int i = 0; i < moves.length; i++) {
            int tmp = 0;
            int location = moves[i] - 1;

            for (int j = 0; j < board.length; j++) {
                if (board[j][location] != 0) {
                    tmp = board[j][location];
                    board[j][location] = 0;
                    break;
                }
            }

            if (tmp != 0) {
                if ((basket.size() >= 1) && (basket.get(basket.size() - 1) == tmp)) {
                    basket.remove(basket.size() - 1);
                    answer += 2;
                } else
                    basket.add(tmp);
            }
        }

        return answer;
    }

 

스택으로 구현한 코드 :

    public static int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> basket = new Stack<>();

        for (int i = 0; i < moves.length; i++) {
            int tmp = 0;
            int location = moves[i] - 1;

            for (int j = 0; j < board.length; j++) {
                if (board[j][location] != 0) {
                    tmp = board[j][location];
                    board[j][location] = 0;
                    break;
                }
            }

            if (tmp != 0) {
                if (basket.size() >= 1 && basket.peek() == tmp) {
                    basket.pop();
                    answer += 2;
                } else
                    basket.push(tmp);
            }
        }

        return answer;
    }

 

 

백준만 풀어보다가 프로그래머스 풀어보는데 뭔가 기분이 좋다. 다른 것도 풀어봐야지!