Coding/PS

[구현 / 2019 카카오 겨울 인턴십] 크레인 인형뽑기 게임

문제 출처

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

접근

처음엔 가장 많이 터트릴 수 있는 경우를 찾는 문제인 줄 알았는데, 그냥 시뮬레이션 해보는 거라 당황했다.

c++ 벡터를 통해 스택을 구현해서 시뮬레이션을 돌렸다.

풀이

뽑은 인형을 담아두는 게 실제로 스택과 구조가 같다.

또한 터트리는 경우를 알아내는 여러 방법이 있겠지만 가장 직관적인 방법은 넣을 때마다 가장 위와 그 바로 아래것만 체크하는 것이다.

코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(vector< vector<int> > board, vector<int> moves) {
    int answer = 0;
	int len = 0;
	int col;
    
    vector<int> basket;
    
    for (int i = 0; i < moves.size(); ++i)
    {
		col = moves[i] - 1;
		
		// pick one
		for (int j = 0; j < board.size(); ++j)
		{
			if (board[j][col] != 0)
			{
				basket.push_back(board[j][col]);
				cout << board[j][col] << endl;
                len++;
                board[j][col] = 0;
				break;
			} 
		}
		
		// check 'pop'
		if (len >= 2 && basket[len-1] == basket[len-2])
		{
			answer += 2;
			len -= 2;
			basket.pop_back();
			basket.pop_back(); 
		}
    }
    
    return answer;
}

'Coding > PS' 카테고리의 다른 글

[Greedy / Gold 5] 2812번: 크게 만들기  (0) 2020.09.05
[Greedy / Gold5] 1038번: 감소하는 수  (0) 2020.09.05
[Greedy] 문자열 합치기  (0) 2020.08.31
[Greedy] 런치박스  (0) 2020.08.30
[Greedy] 출전 순서 정하기  (0) 2020.08.28