GitHubSeob

C++ / 프로그래머스 / 크레인 인형뽑기 게임 본문

Programmers/Level 1

C++ / 프로그래머스 / 크레인 인형뽑기 게임

GitHubSeob 2021. 8. 8.

문제

https://programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[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]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

문제풀이

문제가 길어서 그런지 어려워보이지만 간단하다.

인형을 뽑아서 담는 벡터 basket을 선언한다.

[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]
 1  2  3  4  5

예제의 인형뽑기 기계이다.

0이면 비어있고 숫자가 같으면 같은인형, 다르면 다른 인형이 담겨있다.

1번에서 뽑을경우 맨 위부터 0이 아닌 인형이 있는 곳을 탐색한다.

발견하면 basket을 push하여 바구니에 4를 담는다.

만약 바구니에 인형을 담았을때, 같은 인형이 붙어 있을경우 basket에서 2개의 원소를 pop하고 answer에 +2를 한다.

 

 

코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    vector<int> basket(0, 0);
    int answer = 0;
    int i = 0;
    int j = 0;
    for (i = 0; i < moves.size(); ++i) {
        int col = moves[i] - 1;
        for (j = 0; j < board.size(); ++j) {
            if (board[j][col] != 0) {
                basket.push_back(board[j][col]);
                board[j][col] = 0;
                if (basket.size() >= 2) {
                    if (basket[basket.size() - 1] == basket[basket.size() - 2]) {
                        answer += 2;
                        basket.pop_back();
                        basket.pop_back();
                    }
                }
                break;
            }

        }
    }
    return answer;
}