본문 바로가기
알고리즘 문제 풀이/프로그래머스

프로그래머스 : 크레인 인형뽑기 게임

by 성건희 2020. 4. 3.
반응형

*** 본 풀이는 java 언어를 사용하였습니다 ***

문제 보러가기

 

요약

board 안의 인형을 moves 순서대로 집어서 바구니에 담는다.

바구니에 담을 때 같은 인형이 2개면 인형이 사라진다.

사라진 인형의 개수를 구하라.

2차원 배열, stack 자료구조에 대한 이해가 있는지 점검하는 문제인 듯 하다.

 

풀이

바구니에 넣을 때 바구니의 아래쪽부터 쌓이는 방식이므로

stack 자료구조를 이용하면 되겠다고 생각했다.

바구니에 넣을 때, 가장 최근에 바구니에 들어간 인형을 비교하여

인형이 동일하면 바구니의 최근 인형을 제거하는 식으로 코딩을 했더니 쉽게 문제를 풀 수 있었다.

 

제출 코드

import java.util.Stack;

public class Solution {
    private int countOfMissDoll;

    public int solution(int[][] board, int[] moves) {
        Stack<Integer> result = new Stack<>();
        countOfMissDoll = 0;
        for (int move : moves) {
            moveTong(board, result, move - 1);
        }

        return countOfMissDoll;
    }

    private void moveTong(int[][] board, Stack<Integer> result, int move) {
        for (int i = 0; i < board.length; i++) {
            int current = board[i][move];
            if (isPutDollInBasket(current)) {
                putDollInBasket(board, result, current, i, move);
                break;
            }
        }
    }

    private boolean isPutDollInBasket(int current) {
        return current != 0;
    }

    private void putDollInBasket(int[][] board, Stack<Integer> result, int current, int i, int move) {
        if (isSamePreDoll(current, result)) {
            result.pop();
            countOfMissDoll += 2;
            board[i][move] = 0;
            return;
        }
        result.push(current);
        board[i][move] = 0;
    }

    private boolean isSamePreDoll(int current, Stack<Integer> result) {
        return result.size() >= 1 && result.peek() == current;
    }
}

 

회고

사실 문제 자체는 크게 어려운 부분은 없어서

리팩토링 습관을 기르기 위해 메서드를 분리하는데에 시간을 더 많이 썼다.

면접 대비를 한다고 알고리즘에 손을 잠시 놓고 있었는데

곧 있을 프로그래머스 Dev-Matching 챌린지에 대비하기 위해서 다시 달려야겠다.

나 자신, 화이팅!!

반응형

댓글