문제링크 : programmers.co.kr/learn/courses/30/lessons/64061
명령어대로 인형을 뽑아서 어떤 공간에 차곡차곡 쌓다가 연속으로 2번 같은 인형이 겹치면 점수를 획득하는 게임이다.
위 한줄을 읽으니 당연 스택으로 구현하면 편해보인다. 그렇게 생각하니 인형이 있는 N*N 공간도 스택으로 구현하는 방법이 생각나서 그렇게 했다. 맵의 최대 열이 30이므로 한 열마다 스택 하나씩 해서 30개를 만들면 될 것 같다.
맵을 구성 후에는 명렁어대로 moves[i]열의 스택에서 인형을 꺼내서 인형을 쌓을 스택(ans)로 옮기고 원래 맨 위에 있던 인형과 같은 인형이면 점수를 획득과 동시에 두 인형은 제외하는 작업을 반복한다.
import java.util.*;
class Solution {
public static int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> st[] = new Stack[31];
Stack<Integer> ans = new Stack<Integer>();
for(int i=1;i<31;i++){
st[i] = new Stack<Integer>();
}
for(int j=0;j<board[0].length;j++){
for(int i=board.length-1;i>=0;i--){
if(board[i][j]!=0){
st[j+1].push(board[i][j]);
}
}
}
for(int i=0;i<moves.length;i++){
int num = moves[i];
if(!st[num].isEmpty()){
int doll = st[num].pop();
if(!ans.isEmpty() && ans.peek() == doll){
answer+=2;
ans.pop();
}else{
ans.push(doll);
}
}
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] N으로 표현 [JAVA] (0) | 2021.06.03 |
---|---|
[프로그래머스] kakao 2019 겨울 인턴십 / 호텔 방 배정 [JAVA] (0) | 2021.05.09 |
[프로그래머스] 2021 dev-matching 다단계 칫솔 판매 [JAVA] (0) | 2021.05.01 |
[프로그래머스] 2021 dev-matching - 행렬 테두리 회전하기 [JAVA] (0) | 2021.05.01 |
[프로그래머스] 2021 dev-matching 로또의 최고 순위와 최저 순위 [JAVA] (0) | 2021.05.01 |