Programmers Review

[Lv 1] 크레인 인형뽑기

hanseongbugi 2024. 5. 30. 17:13

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

 

프로그래머스

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

programmers.co.kr

 

이 문제는 삽입 시 같은 인형을 2개 발견하면 2개의 인형을 터트리는 문제이다.

따라서 인형을 삽입하는 공간을 vector로 선언하여 맨 뒤의 인형이 무엇인지 판단해야한다.

또한 인형을 삽입하기 전에 같은 인형이 바구니의 맨 위에 있는지 확인한다.

 

바구니가 비어있지 않고 바구니의 맨 위가 삽입할 인형과 같다면 인형 2개를 터트리고 맨 위에 있는 인형을 바구니에서 제거한다.

같은 인형이 아닌 경우 바구니의 맨 위에 인형을 삽입한다.

 

#include <string>
#include <vector>

using namespace std;
vector<int> barket;
int N,M;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    N = board.size();
    M = moves.size();
    for(int i = 0;i<M;i++){
        int crane = 0;
        int move = moves[i];
        while(crane < N){
            if(board[crane][move-1]>0){
                if(!barket.empty()&&barket.back() == board[crane][move-1]){
                    answer += 2;
                    barket.pop_back();
                }
                else
                    barket.push_back(board[crane][move-1]);
                board[crane][move-1] = 0;
                break;
            }
            crane += 1;
        }
        
    }
    
    return answer;
}