기타/Algorithm

[프로그래머스] #lv1 - 크레인 인형뽑기 게임 (Java)

mopil 2023. 1. 12. 15:03
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=java 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

# 힌트

스택. 

 

해답 보기

더보기

 

public static int solution(int[][] board, int[] moves) {
    List<Stack<Integer>> mat = new ArrayList<>();
    for (int j = 0; j < board[0].length; j++) {
        Stack<Integer> temp = new Stack<>();
        for (int i = board.length - 1; i >= 0; i--) {
            int n = board[i][j];
            if (n != 0) temp.add(n);
        }
        mat.add(temp);
    }
    Stack<Integer> stack = new Stack<>();
    int result = 0;
    for (int n : moves) {
        // 보드에서 꺼내기
        int popped;
        try {
            popped = mat.get(n - 1).pop();
        } catch (Exception ignored) {
            continue;
        }

        // 결과물 스택에 넣기
        stack.push(popped);

        // 동일한거 터트리기
        while (true) {
            if (stack.size() <= 1) break;
            int a = stack.pop(); // 맨위
            int b = stack.pop(); // 아래
            if (a != b) {
                stack.push(b);
                stack.push(a);
                break;
            }
            result += 2;
        }
    }
    System.out.println(stack);
    return result;
}

 

게임 판을 좌우 회전시켜서 스택에 담고, 결과물도 스택에 담는다.

회전시켜서 담을 때, 0은 담지 않도록 별도의 체크를 해줘야한다. (0을 담으면 pop 했을 때 0이 나오는 경우가 생겨버림)

동일한거 터트리는 로직만 잘 생각하면 그렇게 어렵지 않은 구현 문제.

반응형