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 |