[프로그래머스] LV1. 크레인 인형뽑기 게임

journey📸·2021년 9월 15일
0
post-thumbnail

💻 문제 설명




🔎 나의 해결 방식

사실 문제 생긴 것만 보고서는 복잡해보였다. 천천히 읽어보니까 '어? 금방 풀겠는데?'싶었다. 문제 설명의 그림을 보자마자 바로 스택이 떠올랐고, 바로 풀이 방식이 떠올랐다.

📝 풀이 순서

📍
이중 for문을 사용하여 풀이했다. 수행해야하는 움직임이 들어있는 moves배열의 길이만큼 반복하고, 한 번의 크레인 움직임에서 한칸씩 내려가면서 잡을 인형이 있는지 확인하기 위한 배열이 필요했다.

for(int m : moves){
    int col = m-1;
    for(int i = 0; i < board.length; i++){

📍
현재 크레인이 위치한 곳의 값이 0이 아닌 값이 들어있다면, 잡을 인형이 있다는 뜻이므로 숫자를 배열에서 빼내서 스택에 넣어준다.

📍
넣기 전에 peek()을 사용하여 현재 크레인이 잡은 숫자와 스택의 top에 위치한 숫자가 같은지 확인한다.

 if(!(stack.isEmpty()) && stack.peek()==cur){
 	answer+=2;
 	stack.pop();
 }
 else{
 	stack.push(cur);
 }
 board[i][col] = 0;

숫자가 같으면 스택에 넣지 않고 pop()을 수행한다.
숫자가 다르면 스택에 push()를 해준다.

📍
pop() 또는 push()를 한 후 크레인이 위치한 인덱스의 값을 0으로 바꿔준다.

💡 코드

import java.util.Stack;

class Soultion{

    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        for(int m : moves){

            int col = m-1;
            for(int i = 0; i < board.length; i++){
                int cur = board[i][col];

                if(cur != 0) {
                    if(!(stack.isEmpty()) && stack.peek()==cur){
                        answer+=2;
                        stack.pop();
                    }
                    else{
                        stack.push(cur);

                    }
                    board[i][col] = 0;
                    break;

                }

            }


        }

        return answer;
    }


}

	







profile
https://iwntberich.tistory.com/

0개의 댓글