쌓고 쌓다

[프로그래머스] 크레인 인형뽑기 게임 C++ 풀이 본문

알고리즘/프로그래머스

[프로그래머스] 크레인 인형뽑기 게임 C++ 풀이

승민아 2022. 6. 27. 18:17

 

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

 

전체 코드

#include <string>
#include <vector>
#include <stack>
using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    stack<int> s;
    
    for(int i=0;i<moves.size();i++) // moves 탐색
    {
        for(int j=0;j<board.size();j++) // N 크기만큼 탐색
        {
            if(board[j][moves[i]-1]!=0){ // moves 번호를 따와 격자 위에서부터 아래로 탐색 
                
                if(!s.empty()&&s.top()==board[j][moves[i]-1]) // 넣을 인형과 바구니 인형 동일
                {
                    s.pop();
                    answer+=2;
                }
                else // 다르면 그냥 바구니에 담음
                    s.push(board[j][moves[i]-1]);
                
                board[j][moves[i]-1]=0; // 뽑은 인형 자리는 0으로 채우기
                break;
            }
        }
    
    }
    
    return answer;
}

 

바구니를 스택을 이용해 구현하고

크레인으로 뽑은 인형을 넣기 전 같은지 비교를 하여

 

1. 같으면 크레인으로 뽑은 인형과 바구니의 인형을 터트려 +=2 해줍니다.

이때 크레인으로 뽑은 인형은 바구니에 넣지 않습니다.

 

2.  크레인으로 뽑은 인형과 바구니의 맨 위 인형이 다르면 그냥 인형을 바구니에 넣습니다.

 

1, 2 과정 둘 다 크레인으로 뽑은 인형 자리는 0으로 채워줍니다.

Comments