Post

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

문제


문제를 보시려면 링크를 클릭해주세요.


풀이


스택을 사용하여 뽑은 인형을 담아줬습니다.

스택이 비어있을 경우, pop(), top() 호출은 런타임 에러가 발생하므로 주의


크레인이 인형을 뽑을 경우, 2가지 방법으로 동작합니다.

  1. 스택이 비어있지 않고, 스택 가장 위에 담겨있는 인형이랑 뽑은 인형이 같을 경우,

    스택 가장 위에 담겨있는 인형을 제거하고, 그 좌표의 인형을 비워줍니다.

    두 인형은 터뜨려지기 때문에 answer+2 해줍니다.

  2. 1번에 해당하지 않을 경우,

    뽑은 인형을 스택에 담고, 그 좌표의 인형을 비워줍니다.


소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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++){
        for(int j=0; j<board[0].size(); j++){
            
            if(board[j][moves[i]-1]!=0){
                if(!S.empty() && S.top()==board[j][moves[i]-1]){
                    S.pop();
                    board[j][moves[i]-1]=0;
                    answer+=2;
                    break;
                }
                else{
                    S.push(board[j][moves[i]-1]);
                    board[j][moves[i]-1]=0;
                    break; 
                }
            }
        }
    }
    
    return answer;
}



This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.