https://programmers.co.kr/learn/courses/30/lessons/64061
코딩테스트 연습 - 크레인 인형뽑기 게임
[[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]] [1,5,3,5,1,2,1,4] 4
programmers.co.kr
Stack
바구니를 Stack으로 사용하여 늦게 들어간 인형끼리 비교하여 같을 시 Count++하고 제거할 수 있도록 설정
문제
* 좌측 상단부터 (0,0)으로 아래, 오른쪽으로 갈수록 숫자가 커진다.
* for문에서 board의 길이와 moves의 길이 순서는 상관없음
* board[j][moves[i] -1]
- [행][열] : 행은 board.length, 열은 moves의 값(몇번째 열)
- moves[i]-1을 해주는 이유는 배열은 0부터 시작하여 0열부터 시작하는데 moves의 값을 보면 1부터 시작하므로
-1을 해주어 0부터 시작하도록 설정
import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < moves.length; i++){
for(int j = 0; j < board.length; j++){
// 선택한 칸이 비어있지 않다면
if(board[j][moves[i]-1] != 0){
// stack 마지막에 넣은 값이 비어있지않고 크레인이 뽑은 값과 같다면
if(!stack.empty() && stack.peek() == board[j][moves[i]-1]){
// 사라지는 인형은 2개이므로 +=2
answer += 2;
// stack 마지막 값을 지워주고, 크레인이 뽑은 값도 지워줌
stack.pop();
board[j][moves[i]-1] = 0;
break;
// 값이 같지 않다면
}else{
// stack 마지막값으로 넣어주고 board에서 크레인으로 뽑은 값은 0으로 처리해준다
stack.push(board[j][moves[i]-1]);
board[j][moves[i]-1] = 0;
break;
}
}
}
}
return answer;
}
}
'Programmers' 카테고리의 다른 글
[Java] 프로그래머스 : 직사각형 별찍기[Scanner] (0) | 2022.07.11 |
---|---|
[Java] 프로그래머스 : 구명보트(Greedy Algorithm) (0) | 2022.06.28 |
[Java] 프로그래머스 : 위장(Hash) (0) | 2022.06.24 |
[Java] 프로그래머스 : 완주하지 못한 선수(Hash) (0) | 2022.06.24 |
[Java] 프로그래머스 : 큰 수 만들기(StringBuilder 사용) (0) | 2022.06.21 |
댓글