Programmers [크레인 인형 뽑기 게임] - 64061
2022. 1. 25. 20:25ㆍ프로그래머스
문제는 다음 링크를 참고해주세요.
https://programmers.co.kr/learn/courses/30/lessons/64061
인형 뽑기 게임입니다.
개인적로는 문제 설명이 좀 부족해서 아쉬웠던... 문제였습니다.
board 2차원 배열의 예시 부분에서 이해하기 힘든 분들이 많았을 거라고 생각이 듭니다.
중요한 자료구조의 하나인 스택을 사용하는 문제였습니다.
Stack<Integer> stack = new Stack<>();
java.util.stack
자바에서 스택 클래스를 구현해 놓았으니 가져다 쓰면 되겠습니다.
moves[] 를 매개변수로 받는데 몇 번째 레인에서 인형뽑기를 할 것인지 를 알 수 있습니다.
저는 int idxOfLane[] 배열에 각 레인에 인형이 얼마나 남았는지를 표시했습니다.
idxOfLane[N] = M; => N+1 번 레인에 M+1개의 인형이 남아있다.
idxOfLane[1] = 3; 이라면 1번 레인에는 4개의 인형이 남아있다는 의미입니다.
기계기 인형을 뽑아가면 idxOfLane 값이 1만큼 감소합니다.
이 뽑아온 값을 Stack에 있는 값과 비교하여 동일하면 pop을, 아니라면 push 해주면 되겠습니다.
Stack을 활용한 문제로, stack 활용법을 알고 있다면 어렵지 않은 문제였습니다.
전체 소스코드
public int solution(int[][] board, int[] moves) {
int result = 0;
Stack<Integer> stack = new Stack<>();
int n = board.length;
int[] idxOfLane = new int[n];
for(int i=0;i<n;i++){
idxOfLane[i] = n-1;
}
for(int i=0;i<n;i++){
for(int j=0;j<=n-1;j++){
if(board[j][i] == 0){
idxOfLane[i]--;
}else break;
}
}
for (int num : moves) {
int idx = idxOfLane[num-1];
int xIndex = (n-1)-idx;
int yIndex = num - 1;
int number = board[xIndex][yIndex];
if(number != 0){
board[xIndex][yIndex] = 0;
if(idxOfLane[num-1]!=0)
idxOfLane[num-1]--;
if(!stack.isEmpty() && number == stack.peek()){
stack.push(number);
stack.pop(); stack.pop();
result += 2;
}else
stack.push(number);
}else{ // 뽑기 했는데 빈 경우
}
}
return result;
}
'프로그래머스' 카테고리의 다른 글
Programmers [소수 만들기] - 12977 (0) | 2022.01.27 |
---|---|
Programmers [없는 숫자 더하기] - 86051, [음 양 더하기] - 76501 (0) | 2022.01.27 |
프로그래머스 [키패드 누르기] - 67256 (0) | 2022.01.24 |
프로그래머스 [신규 아이디 추천] - 72410 (0) | 2022.01.23 |
Programmers [로또의 최고 순위와 최저 순위] - 77484 (0) | 2022.01.22 |