[C++로 풀이] 크레인 인형뽑기 게임 ⭐

Date:     Updated:

카테고리:

태그:

크레인 인형뽑기 게임

난이도 ⭐

문제

image

image

image


풀이

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    
    // 계속 업데이트 할 인형들 배치 상태
    // 원소들은 Queue : 가장 위에 있는 것이 먼저 빠져나오기 위해 (가장 위에 있는 것이 가장 먼저 큐에 삽입되게 할 것이다. (가장 먼저 제거되기 위해))
    vector<queue<int>> dolls(board.size());  
    vector<int> basket;  // 바구니
    
    // 큐에 0 은 저장하지 않는다. 큐에 가장 먼저 삽입된 것이 가장 위에 있는 원소.
    // board의 0을 제외한 각각의 '열'의 원소들이 각각의 dolls 큐들에서 관리된다.
    for(int i = 0; i < board.size(); i++)
        for(int j = 0; j < board.size(); j++)
            if (board[i][j] != 0)
                dolls[j].push(board[i][j]);
    
    for(int i = 0; i < moves.size(); i++)
    {
        // 큐가 비어 있지 않다면, 즉 크레인이 멈춘 곳에 인형이 1개 이상이라도 있다면
        if(!dolls[moves[i] - 1].empty())
        {
            // 바구니에 인형을 넣고
            basket.push_back(dolls[moves[i] - 1].front());
            // 격자에선 해당 인형을 지운다.
            dolls[moves[i] - 1].pop();
        }
        
        // 바구니에 같은 인형 2개가 연속되었는지 검사
        int end = basket.size() - 1;
        // 바구니의 마지막 원소, 마지막에서 두번째 원소가 같은 종류라면
        if (basket.size() >= 2 && basket[end] == basket[end - 1]) 
        {
            // 이 2개의 인형을 지운다.
            // 이 과정에서 answer도 증가.
            for(int j = 0; j < 2; j++)
            {
                basket.pop_back();
                answer++;
            }
        }
    }
    
    return answer;
}


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Programmers 카테고리 내 다른 글 보러가기

댓글 남기기