Chapter02/코딩테스트

[ 프로그래머스 ] 크레인 인형뽑기

EmmaDev_v 2025. 9. 2. 16:27

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

  • 배열 & 스택 문제.
  • 인형을 하나씩 꺼내서 스택에 넣고, 같은 인형이 연속되면 터뜨려서 점수 계산.
  • 배울 포인트: Stack 자료구조 연습.

 

 

접근

 

  • board 배열에서 인형 뽑기
    • move 값 = 열 번호.
    • 해당 열에서 위에서부터 처음 0이 아닌 값을 찾아서 뽑음.
    • 뽑으면 그 자리는 0으로 바꿔야 함.
  • 스택에 넣기
    • 뽑은 인형을 stack에 push.
    • 단, 스택의 top과 같은 인형이면 → 둘 다 제거(pop) + count += 2.
  • count 반환
    • 터뜨려진 인형 개수 누적.

 

 

 

 

 

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int count = 0;
        Stack<Integer> basket = new Stack<>();
        
        for (int move : moves) {
            int col = move - 1; // 인덱스 맞추기
            int picked = 0;

            // 위에서부터 탐색
            for (int row = 0; row < board.length; row++) {
                if (board[row][col] != 0) {
                    picked = board[row][col];
                    board[row][col] = 0; // 뽑았으니 0으로
                    break;
                }
            }

            if (picked == 0) continue; // 인형 없으면 skip

            // 스택 비교
            if (!basket.isEmpty() && basket.peek() == picked) {
                basket.pop();
                count += 2;
            } else {
                basket.push(picked);
            }
        }
        return count;
    }
}

 

문제에서 제시한 전제조건

파라미터 board, moves는

  • board는 2차원 배열 (행렬) → board[row][col]
  • moves는 집게가 움직일 열 번호 (1부터 시작)

 

인형 담을 곳은 Stack임

Stack<Integer> basket = new Stack<>(); 

가장 마지막에 넣은 인형 (top)과 새로 넣을 인형이 같으면 사라지니까 LIFO로 Stack

 

 

 

 

 

 

 

 

 

 

 

반응형