[C++로 풀이] 크레인 인형뽑기 게임 ⭐
카테고리: Programmers
태그: Coding Test Algorithm
크레인 인형뽑기 게임
난이도 ⭐
문제
풀이
#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;
}
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기