문제 링크
문제요약
위위 같은 그림이 있을 때, 각 열에 있는 것을 하나씩 올려 오른쪽 칸에 넣었을 때, 만약 같은 캐릭터가 연속되어 들어가게 되면 같은 캐릭터들은 사라지게 된다. 어느 칸을 움직일 지 담겨있는 moves 가 주어질 때, 사라진 인형의 개수를 구하여라.
접근 방법
오른쪽에 쌓이는 구조가 Stack 구조 이기 때문에, 매 move 마다 stack에 캐릭터를 담아주고 만약 stack의 가장 위가 집은 캐릭과 같다면, pop을 해준다. 문제 설명에는 아무것도 집지 못하는 경우는 없다고 하여 선택한 열이 비어있는 경우, 그냥 0을 받는 식으로 구현하였는데, 이렇게 하니 몇개의 테스트에서 통과하지 못하였다. 따라서 만약 아무것도 집히지 않아 0을 받는 다면, 아무일도 일어나지 않고 넘어가는 식으로 변경하였다.
코드
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int move : moves) {
int doll = pickDoll(board, move - 1);
if (doll == 0) continue;
if (stack.empty() || stack.peek() != doll) {
stack.push(doll);
} else {
stack.pop();
answer += 2;
}
}
return answer;
}
private int pickDoll(int[][] board, int move) {
for (int i = 0; i < board.length; i++) {
int temp = board[i][move];
if (temp != 0) {
board[i][move] = 0;
return temp;
}
}
return 0;
}
}
'Algorithm Practice > Programmers' 카테고리의 다른 글
[Programmers] 성격 유형 검사하기 (Java) (0) | 2023.09.27 |
---|---|
[Programmers] 하노이의 탑 (Java / Python) (0) | 2023.09.06 |
[Programmers] 멀쩡한 사각형 (Java) (0) | 2023.09.05 |
[Programmers] 거리두기 확인하기 (Java) (0) | 2023.09.05 |
[Programmers] 시소 짝궁 (Java) (0) | 2023.09.05 |