[프로그래머스/C++]Lv.1 - 크레인 인형뽑기

YH J·2023년 5월 22일
0

프로그래머스

목록 보기
92/168

문제 링크

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

내 풀이

moves의 원소에따라 for문을 돌리면서 탐색할 때 0이 아닌 원소를 만나면 save에 push 하고 그 원소를 0으로 만든 뒤 탐색을 종료한다.
탐색 한번 종료 후 save의 원소를 점검해서 최근에 넣은 2개가 같으면 둘다 지운 뒤 answer에 +2를 해준다.

내 코드

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

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    vector<int> save;
    for(int m : moves)
    {
        for(int i = 0; i < board[m - 1].size(); i++)
        {
            if(board[i][m - 1] != 0)
            {
                save.push_back(board[i][m - 1]);
                board[i][m - 1] = 0;
                break;
            }
        }
        if(save.size() >= 2 && (save[save.size() - 1] == save[save.size() - 2]))
        {
            answer += 2;
            save.pop_back();
            save.pop_back();
        }
    }
    return answer;
}

다른 사람의 풀이

#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++)
    {
        int check = moves[i] - 1;
        for(int j=0;j<board.size();j++)
        {
            if(board[j][check] != 0)
            {
                if(!s.empty() && s.top() == board[j][check])
                {
                    s.pop();
                    answer += 2;
                }
                else
                    s.push(board[j][check]);
                board[j][check] = 0;
                break;
            }
        }
    }
    return answer;
}

다른 사람의 풀이 해석

방식은 비슷한데 0이아닌 원소일 때 넣기전에 저장해둔 마지막 원소랑 비교하여 같으면 아예 넣지 않고 마지막 원소를 제거하고 answer += 2를 해준다.

profile
게임 개발자 지망생

0개의 댓글