본문 바로가기

카카오/2019 카카오 개발자 겨울 인턴십

[C++] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임

 

 

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

#include <bits/stdc++.h>


int select(std::vector<std::vector<int>> & board, int x){
    for (int y = 0; y < board.size(); ++y){
        if (board[y][x] != 0) {
            int temp = board[y][x];
            board[y][x] = 0;
            return temp;
        }
    }
    return 0;
}


int solution(std::vector<std::vector<int>> board, std::vector<int> moves) {
    int answer = 0;
    std::stack<int> bucket;
    for (int pos : moves){
        // 현재 위치에서 인형을 뽑는다.
        int doll = select(board, pos - 1);
        // 뽑은 인형이 0이 아닌 경우, 즉 인형이 없는 위치인 경우를 제외하고
        if (doll == 0) continue;
        // bucket에 넣는다.
        bucket.push(doll);
        // bucket의 사이즈가 2보다 큰 경우
        if (bucket.size() < 2) continue;
        // bucket의 탑과 그 전 값이 갔을 때 까지 지우는 작업을 반복한다.
        // 값을 때마다 answer += 2
        while(bucket.size() >= 2){
            int curr = bucket.top(); bucket.pop();
            if (curr == bucket.top()){
                answer += 2;
                bucket.pop();
            }
            else {
                bucket.push(curr);
                break;
            }
        }
    }
    return answer;
}