티스토리 뷰
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/64061
2019 카카오 개발자 겨울 인턴십의 Level 1 문제다.
각 바구니를 뜻하는 스택 배열(doll[])을 만들어 인형을 push했고,
크레인 작동으로 꺼내온 인형을 담는 스택(stack)을 만들었다.
인형을 하나씩 stack에 집어넣을 때마다 스택의 가장 위 인형이 무엇인지 확인(peek)하고,
집어넣으려는 인형과 스택의 가장 위에 있는 인형이 같다면
그 인형 두개가 터트러져야 하므로 cnt를 2 증가시킨다.
그리고 인형을 집어넣지 않고 가장 위에 있는 인형을 삭제해야 하므로 pop한다.
List를 통해 풀 수도 있겠지만 LIFO의 스택 사용을 목적으로 한 문제인 것 같아 스택을 사용했다.
import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
int n = board.length;
Stack<Integer>[] doll = new Stack[n];
for(int i=0;i<n;i++)
doll[i] = new Stack<>();
for(int i=n-1;i>=0;i--) {
for(int j=0;j<n;j++) {
if(board[i][j] != 0) {
doll[j].push(board[i][j]);
}
}
}
int cnt = 0;
Stack<Integer> stack = new Stack<>();
for(int i=0;i<moves.length;i++) {
int m = moves[i] - 1;
if(doll[m].size() != 0) {
int d = doll[m].pop();
if(!stack.isEmpty() && stack.peek() == d) {
stack.pop();
cnt += 2;
}
else
stack.push(d);
}
}
return cnt;
}
}
728x90
'algorithm > programmers' 카테고리의 다른 글
[프로그래머스/자바] 수식 최대화 풀이 - 2020 카카오 인턴십 (0) | 2022.11.13 |
---|---|
[프로그래머스/자바] 키패드 누르기 풀이 - 2020 카카오 인턴십 (0) | 2022.11.13 |
[프로그래머스/자바] 튜플 풀이 - 2019 카카오 개발자 겨울 인턴십 (0) | 2022.11.13 |
[프로그래머스/자바] 불량 사용자 풀이 - 2019 카카오 개발자 겨울 인턴십 (0) | 2022.11.13 |
[프로그래머스/자바] 징검다리 건너기 풀이 - 2019 카카오 개발자 겨울 인턴십 (2) | 2022.11.13 |