2019 카카오 개발자 겨울 인턴십 크레인 인형뽑기 게임 [JAVA] - 22년 7월 16일

Denia·2022년 7월 16일
0

코딩테스트 준비

목록 보기
9/201
package com.company;

import java.util.Stack;

class Solution {
    static public void main(String[] args) {
        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};

        System.out.println(solution(board, moves));
    }

    static public int solution(int[][] board, int[] moves) {
        //초기값 지정
        int answer = 0;
        //인형을 넣을 스택을 만들어준다.
        Stack<Integer> stack = new Stack<Integer>();

        //moves 처리 , for문 돌면서 1개 1개 확인
        for (int move : moves) {
            //배열이기 때문에 index는 -1이 필요함
            int index = move - 1;

            //2차원 배열이므로 1차원 배열을 꺼내서 확인한다/
            for (int[] boardRow : board) {
                //Board 해당 Row에서 Index를 확인하면 인형을 확인가능
                int doll = boardRow[index];

                //인형이 존재하는 경우
                if(doll != 0){
                    //인형을 꺼내므로 해당 자리에 인형이 없다는 의미에 0을 넣음
                    boardRow[index] = 0;
                    //인형을 꺼내고 stack에 넣기전에 비교,
                    //맨 위의 인형이랑 동일한 인형이면 "터트리고" answer 를 +2 하자,
                    //기존에 인형이 없는 경우에는 peek 할 수 없으므로 stack.empty()를 확인해야함 [안하면 EmptyStackException발생]
                    if(!stack.empty() && stack.peek() == doll){
                        stack.pop(); // 기존 인형 터트리기 , 새로 뽑은 인형은 넣지도 않는다
                        answer += 2; // answer 값 +2 시키기
                    }
                    //인형이 동일하지 않으면 쌓기
                    else {
                        stack.push(doll);
                    }

                    //인형을 찾았으므로 break 문으로 빠져나온다.
                    break;
                }
            }
        }

        return answer;
    }
}

profile
HW -> FW -> Web

0개의 댓글