coding_test/programmers

lv1 / 크레인 인형 뽑기 게임 / 카카오 기출 / C++

CodeJin 2022. 7. 27. 22:32

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


입력받은 board를 스택벡터로 다시 재구성하여, 맨 위에서부터 인형을 가져가기 용이하게 board를 재구성했다. 이후, moves에서 움직이라는대로 움직이며, 바구니에 인형을 담아보고, 맨 위의 인형과 담을 인형이 같으면 터뜨리고 2를 더하면 된다. 자꾸 1만 더해서 왜 틀렸지 했었다....ㅎㅎ

 

#include <string>
#include <vector>
#include <stack>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    int target;
    vector<stack<int>> bd(board.size());
    stack<int> busket;
    
    // board 전처리
    for(int i = board.size() - 1; i >= 0; i--)  {
        for(int j = 0; j < board[i].size(); j++) {
            if(board[i][j]) bd[j].push(board[i][j]);
        }
    }

    // 풀이
    for(int i : moves) {
        i--;
        if(!bd[i].empty()) {
            target = bd[i].top();
            bd[i].pop();
            
            if(!busket.empty() && target == busket.top()) {
                answer+=2;
                busket.pop();
            }
            else busket.push(target);
        }
    }
    return answer;
}