https://school.programmers.co.kr/learn/courses/30/lessons/64061
* 코드
import java.util.Stack;
import java.util.Arrays;
class Solution {
public int solution(int[][] board, int[] moves) {
Stack <Integer> bucket = new Stack<>();
bucket.add(0);
int answer = 0;
for (int i = 0; i<moves.length; i++){
int move = moves[i]; // 뽑으려는 번호
for (int j=0; j<board.length;j++){
if (board[j][move-1]==0) continue; // 아무것도 없는 경우 아래로 내려감
if (bucket.peek()==board[j][move-1]) {
bucket.pop(); // 같은 인형 들어있으면 인형 터트리기
answer+=2; // 인형 두개 사라짐
}
else {
bucket.add(board[j][move-1]); // 아니면 바구니에 추가
}
board[j][move-1] = 0; // 보드에서 삭제
break;
}
}
return answer;
}
}
* 풀이
스택을 이용한 문제이다.
1. 주어진 board 배열에서 moves 열의 인형을 찾는다.
2. 만약 기존 바구니 스택의 제일 윗부분에 있던 인형(peek)과 push할 인형이 같다면 pop() 시켜서 두 인형을 없애고, 다를 경우 바구니 스택에 push한다.
3. 바구니에 넣은 인형은 보드에서 삭제한다.
'개발 > 코딩테스트' 카테고리의 다른 글
백준 2178번: 미로 탐색 [JAVA] (0) | 2023.03.18 |
---|---|
백준 1991번: 트리순회 [JAVA] (0) | 2023.03.18 |
백준 1931번: 회의실 배정 [JAVA] (0) | 2023.03.16 |
백준 2839번: 설탕 배달 [JAVA] (1) | 2023.03.16 |
백준 11047번: 동전 0 [JAVA] (1) | 2023.03.16 |
댓글