프로그래머스 크레인 인형뽑기 게임 (카카오 2019 겨울 인턴쉽) java

최준호·2021년 7월 16일
0

algorithm

목록 보기
14/39

문제

문제의 내용이 너무 길고 복잡한 관계로 링크로 대체하겠다.

프로그래머스 크레인 인형봅끼 문제 바로가기

풀이

import java.util.ArrayList;
import java.util.Stack;

public class KakaoCrain {
    public static void main(String[] args) {
        KakaoCrain k = new KakaoCrain();
        int[][] board = {{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}};
        int[] moves = {1,5,3,5,1,2,1,4};
        int solution = k.solution(board, moves);
        System.out.println("solution = " + solution);
    }
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        ArrayList<Stack> stackList = new ArrayList<>();
        Stack<Integer> basket = new Stack<>();

        int boardLeng = board[0].length;
        int w = 0;
        //배열의 길이만큼 stack을 만들어서 리스트에 담고
        while(w++<boardLeng){
            stackList.add(new Stack());
        }
        //배열에서 값을 가져와 stack에 맞게 넣어준다.
        for(int i = boardLeng-1; i>=0; i--){
            int[] b = board[i];
            for(int j=0; j<b.length; j++){
                int input = b[j];
                if(input==0){
                    continue;
                }else{
                    stackList.get(j).push(input);
                }
            }
        }

        //크레인이 뽑기 하는 과정 구현
        //뽑은 후 바구니에 들어가야함.
        for(int m : moves){
            //차례대로 뽑기
            int idx = m-1;
            Stack<Integer> stack = stackList.get(idx);
            //스택이 비어 있지 않다면 push
            if(!stack.isEmpty()){
                //push하기 전에 basket이 비어있는지 확인 후 비어있지 않다면 확인
                int pop = stack.pop();
                if(basket.isEmpty()){
                    basket.push(pop);
                }else{
                    if(basket.peek() == pop){
                        basket.pop();
                        answer+=2;
                    }else{
                        basket.push(pop);
                    }
                }
            }
        }

        return answer;
    }
}

1단계 문제라 쉬운편이지만 Stack의 개념을 아주 잘 이해할 수 있는 문제였다. 처음에는 List로 Stack을 담아둘 생각을 하지 못해서 무식하게 Swtich로 분리해서 담고 빼고 했다... 그러다보니 코드가 무식해지고 나중에 문제를 틀려서 고치려고 보니까 손을 못대겠더라... 그래서 아예 싹 지워버리고 새로 풀었더니 생각보다 쉽게 풀렸다.

Stack의 pop, peek, push만 알아도 풀수 있는 문제니 잘 생각해보고 풀면 누구든 금방 풀수 있다!

같은 값을 여러개 주어지게 된다면 List부터 떠올려보자!

0개의 댓글

관련 채용 정보