프로그래머스 크레인 인형뽑기 게임 (카카오 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부터 떠올려보자!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글