본문 바로가기
CS/알고리즘

프로그래머스 - 크레인 인형 뽑기게임 (stack,vector)

by zieunee 2020. 12. 11.
반응형

처음에는 그냥 vector 이용해서 풀었는데 의도는 stack 이길래 다시 풀었음 

#include <string>
#include <vector>

using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
     int answer = 0;
    vector<int> v;
    int compareNum=0;
    for (int i = 0; i < moves.size(); i++) {
        for (int j = 0; j < board.size(); j++) {
            if (board[j][moves[i]-1] != 0) {
                int val = board[j][moves[i] - 1];
                v.push_back(val);
                //터지는지 확인 
                board[j][moves[i]-1] = 0;
                int end = v.size() - 2;
                if (end != -1 && v[end]== val) {
                    answer += 2;
                    v.erase(v.end() - 2, v.end());
                    //지우기
                }
                compareNum = val;
                break;
            }
        }
    }
 
    return answer;
 
    return answer;
}

Stack

#include <vector>
#include <string>
#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.size(); j++) {
            if (board[j][moves[i]-1] != 0) {
                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;
                break;
            }
        }
    }
 
    return answer;
}

 스택 선언 

    stack <int> s;
s.top(); // 맨 마지막으로 넣은 값
s.pop(); // 맨 마지막 값 제거
s.push(board[j][moves[i] - 1]); // 값 push 

 

반응형