개발공부/코딩테스트 연습문제
[프로그래머스] 크레인 인형뽑기 게임
ku-na
2022. 1. 4. 16:47
문제 설명과 제한 사항


문제를 간단히 설명하면 N x N 형태의 뽑기판을 board[N][N]
크레인의 위치를 moves[] 로 정의할 때,
같은 인형을 연속으로 뽑으면 두 인형이 사라진다.
이때 moves에 따른 사라지는 인형의 갯수를 반환하면 된다.
풀이
import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
Stack<Integer> box = new Stack<Integer>();
int answer = 0;
for(int move : moves){
int height = 0;
int m = move - 1;
while(board[height][m] == 0) {
if(height == board.length-1) break;
height++;
}
if(board[height][m] == 0) continue;
if(box.empty()) {
box.push(board[height][m]);
board[height][m] =0;
}
else {
if(box.peek() == board[height][m]) {
box.pop();
board[height][m] = 0;
answer = answer +2;
}
else{
box.push(board[height][m]);
board[height][m] =0;
}
}
}
return answer;
}
}
++
1. Stack 클래스 사용.
2. moves 갯수만 큼 반복 안에 뽑을 인형의 위치를 찾아 뽑는 과정.
3. for each문에서 조건을 만족했을때 다음으로 넘어가는 방법 continue
ㄴ 기억이 안나서 break;를 사용 했었다..
4. 과정에서 2차배열에서 높이와 move의 위치를 헷갈려서 반대로 했었다.
5. pop을 하던 push를 하던 인형을 뽑았으면 해당 위치를 0으로 바꿀 생각을 못해서
항상 가장 위에 있는 인형을 뽑았었다.
여담 : 문제 자체가 장황해서 문제를 읽는게 힘들었다. 알고리즘은 금방 짜게 됐다.