문제요약
- NxN 보드에서 하나씩 뽑아서 바구니에 넣기
- 바구니에서 똑같은 거 두개 쌓이면 터짐
- 터진 인형 개수 구하기
풀이
- 각 컬럼을 스택으로 만들어서 넣어 놓음
- moves 순서대로 stack에서 인형을 꺼냄
- 바구니도 스택으로
- 바구니에서 peek으로 확인 꺼내온 인형과 같으면 pop해서 버림
- 다르면 push
더보기
package KakaoIntern2019.P64061_크레인인형뽑기게임;
import java.util.Stack;
public class Solution {
static int solution(int[][] board, int[] moves) {
int answer = 0;
final int N = board.length;
Stack<Integer>[] stacks = new Stack[N];
Stack<Integer> basket = new Stack<>();
for (int i = 0; i < N; i++) {
stacks[i] = new Stack<>();
}
for (int c = 0; c < N; c++) {
for (int r = N - 1; r >= 0; r--) {
if (board[r][c] == 0)
break;
stacks[c].push(board[r][c]);
}
}
for (int i = 0; i < moves.length; i++) {
int target = moves[i] - 1;
if (stacks[target].isEmpty())
continue;
int cur = stacks[target].pop();
if (!basket.isEmpty() && basket.peek() == cur) {
basket.pop();
answer += 2;
} else {
basket.push(cur);
}
}
return answer;
}
public static void main(String[] args) {
System.out.println(1);
int[][] b = { { 0, 0, 0, 0, 0 }, { 0, 0, 1, 0, 3 }, { 0, 2, 5, 0, 1 }, { 4, 2, 4, 4, 2 }, { 3, 5, 1, 3, 1 } };
int[] m = { 1, 5, 3, 5, 1, 2, 1, 4 };
System.out.println(123);
System.out.println(solution(b, m));
}
}
'알고리즘왕 > Programmers' 카테고리의 다른 글
[프로그래머스/JAVA] 키패드 누르기 (0) | 2021.05.04 |
---|---|
[프로그래머스/JAVA] 불량 사용자 (0) | 2021.05.04 |
[프로그래머스/42889/JAVA] 실패율 (0) | 2021.03.31 |
[프로그래머스/42890/JAVA] 후보키 (0) | 2021.03.29 |
[프로그래머스/60057/JAVA] 문자열 압축 (0) | 2021.03.29 |