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

반응형
    
    
    
  'Chapter02 > 코딩테스트' 카테고리의 다른 글
| [ 프로그래머스 ] 키패드 누르기 (0) | 2025.09.03 | 
|---|---|
| [ 프로그래머스 ] 위클리 챌린지 > 부족한 금액 계산하기 (0) | 2025.06.18 | 
| [프로그래머스] 같은 숫자는 싫어 (1) | 2025.04.03 | 
| [ 프로그래머스 ] 가운데 글자 가져오기 (0) | 2025.03.22 | 
| [ 프로그래머스] 제일 작은 수 제거하기 (0) | 2025.03.20 |