본문 바로가기
코딩테스트/프로그래머스 1단계

프로그래머스 1단계 - 크레인 인형뽑기 게임

by SICDev 2021. 4. 14.
반응형

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

 

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;
    }
}

 

반응형