반응형
https://programmers.co.kr/learn/courses/30/lessons/64061
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
//board에는 어떤 2차원 배열의 값이 들어가있다.
//moves는 어떤위치의 인형을 뽑을지의 순서이다.
//moves[0]의 값이 1이라면 board[0][0]부터 시작한다.
//board[0][0]이 0이기때문에 board[0][1]로 간다.
//3이 있기때문에 stack에 쌓는다. stack.push(board[1][0]);
//이때 stack에 값이 있는지 없는지 판단해서 없으면 쌓고, 있으면 마지막 값과 비교한다.
//stack.peek() != board[1][0] or stack == board[1][0];
//값이 없다면 넣는다. stack.push(board[1][0]);
//쌓여있던 값과 새로 넣으려는 값이 같으면 stack에서 쌓여있던놈을 뽑아낸다.
//stack.pop(); answer+2를 한다.
//그다음 moves[1]의 값이 5라면 board[4][0]로 간다.
Stack<Integer> stack = new Stack<>();
int answer = 0;
//moves의 배열만큼 반복문을 돌린다.
//moves의 값이 행의 값이 된다. EX) moves[0]의 값이 2 이면
//board[1][0], board[1][1], board[1][2]... board[1][i] 이렇게 값을 순차적으로 찾는다.
for(int k=0; k<moves.length; k++){
//2차원배열 행의 길이 arr.length
for(int i=0; i<board.length; i++){
//moves[0]의 값이 행으로 들어가고 열은 board[]의 길이만큼 실행한다.
//board[][]의 값이 0이 아니라면 인형이 존재하는 것이기 때문에 stack에 쌓는다.
if(board[i][moves[k]-1] != 0){
//스택이 비어있는지 값이 있는지 체크한다.
//스택이 비어 있다면
if(stack.empty()){
//해당 인형을 스택에 쌓는다.
stack.push(board[i][moves[k]-1]);
//스택에 값이 있다면
}else{
//스택에 쌓여있는 값과 넣으려는 값을 비교한다.
//두개의 값이 같지 않다면 스택에 새로운값을 쌓는다.
if(stack.peek() != board[i][moves[k]-1]){
stack.push(board[i][moves[k]-1]);
//두개의 값이 같다면 스택에 쌓여있는 값을 추출한다.
//그리고 answer값에 2를 더한다.
}else{
stack.pop();
answer += 2;
}
}
//뽑은 인형의 자리에는 0으로 값을 바꾼다.
board[i][moves[k]-1] = 0;
//해당 반복문을 나간다.
break;
}
}
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 1단계 - K번째수 (0) | 2021.04.18 |
---|---|
프로그래머스 1단계 - 체육복 (0) | 2021.04.16 |
프로그래머스 1단계 - 두개 뽑아서 더하기 (0) | 2021.04.15 |
프로그래머스 1단계 - 나누어 떨어지는 숫자 배열 (0) | 2021.04.13 |
프로그래머스 1단계 - 같은 숫자는 싫어 (0) | 2021.04.12 |