프로그래머스 알고리즘 문제풀이 정리 (크레인 인형뽑기 게임)

황제연·2024년 3월 26일
0

알고리즘

목록 보기
22/169
post-thumbnail
문제 출처제목난이도
2019 카카오 개발자 겨울 인턴십크레인 인형뽑기 게임Lv.1

크레인 인형뽑기 게임

해결코드:

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        for(int i=0; i<moves.length; i++){
            for(int j=0; j<board.length; j++){
                if(board[j][moves[i] - 1] != 0){
                    if(stack.peek() == board[j][moves[i] - 1]){
                        stack.pop();
                        answer+=2;
                    }else{
                        stack.push(board[j][moves[i] - 1]);
                    }
                    board[j][moves[i] - 1] = 0;
                    break;
                }   
            }
        }
        return answer;
    }
}

고민의 시간과 해결 방법:

  1. 카카오 출신 문제답게 지문도 길고 구현보다 이해하는데 시간이 더 걸린 문제이다.
  2. 오른쪽 바구니는 스택형태를 띄고있다. 따라서 이를 담아줄 스택 자료구조를 하나 생성한다.
  3. 주어진 moves 배열 길이만큼 순회를 하면서 주어진 문제를 해결할 로직을 실행하면된다. 따라서 moves.length만큼 배열을 순회한다
  4. 이어서 board의 크기만큼 순회하는데, 이 문제에서 주의할점은 배열의 입력은 좌에서 우이고, moves의 숫자는 열을 의미한다.
  5. moves의 숫자가 1이면 1열에 해당하는 숫자만 탐색하면 된다. 따라서 이중 포문이 아니라 한줄만 순회하면 된다
  6. 그리고 해당하는 열의 행들을 탐색해야 하므로 일반적인 순회인 board[i][j]가 아니라 board[j][i] 형태를 띄어야 한다
  7. board를 탐색하면서 만약 0이 아니라면 인형이 있는 것이다. 따라서 인형이 있다면 스택의 있는 peek 값과 비교해서 같다면 pop해주고 answer에 2를 더해준다. 만약 다르면 해당 위치의 값을 스택에 push해준다
  8. 그리고 해당 위치는 0으로 바꿔줘서 인형이 없음을 나타내고 break한다.
  9. 완성한 answer을 return하면 정답이다.

학습정리

  • 문제 이해를 잘하려면 주어진 상황과 조건별로 분할해서 정리할 필요가 있을 것 같다. 최대한 그림과 주석을 통해 정리하는 습관을 기르도록 하자
  • 여러 문제를 풀면서 비슷한 패턴을 익히는 것이 가장 중요하고, 카카오 급의 코테를 잘 풀려면 아이디어를 잘 캐치하는 것도 중요한 것 같다. 문제마다 최소한의 고민 시간을 꼭 가지고 (최대 30분) 여러 문제를 풀면서 아이디어 캐치 및 구현 능력을 키우자!

문제 링크:

크레인 인형 뽑기 게임

profile
Software Developer

0개의 댓글