728x90
반응형

풀이 방법

문제를 이해한 내용에 대해서 간단하게 수도코드로 설명하자면

1. 크레인의 위치를 확인하고 순서대로 인형을 뽑는다.
2. 인형을 꺼낼 위치에 있는 인형 중 가장 위에 있는 인형을 꺼낸다.
3. 인형을 꺼내어 다른 바구니에 순서대로 담는다.
4. 만약 바구니의 가장 위에 있는 인형과 같다면
    4-1. 바구니의 가장 위에 있는 인형을 꺼낸다.
5. 바구니의 가장 위에 있는 인형과 다르다면
    5-1. 바구니에 인형은 담는다.
6. 인형을 꺼낸 위치에 인형이 없다고 표시한다.

이런 과정으로 이해했다. 이런 과정을 통해 아래의 코드를 짰다.

문제를 푸는 과정에서 인형을 뺐으면 인형이 없는 것처럼 0으로 초기화 해줘야 하는데
0으로 초기화해주지 않아서 잘못된 결과를 가져왔었다.
그래서 cout 으로 한 구문씩 출력해 디버깅하면서 문제를 찾았던 것 같다.
그리고 하나하나 적어가면서 문제를 풀어본 것 같다.

소스 코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    
    // 빼낸 인형을 담을 배열
    vector<int> results;
    
    for(int i=0; i<moves.size(); i++) {
        int loc = moves[i];
        
        for(int j=0; j<board.size(); j++) {
            if (board[j][loc-1] != 0) {
                int get = board[j][loc-1];
                
                // 인형이 있을 때 전에 들어간 인형과 같은 인형일 경우
                if(results.size() > 0 && results.back() == get) {
                    // 인형을 넣지 말고 마지막에 들어있는 인형을 빼준다.
                    results.pop_back();
                    // 그리고 2개를 빼냈기 때문에 2개를 더해준다.
                    answer+=2;
                } else {
                    // 인형을 하나씩 쌓아준다.
                    results.push_back(board[j][loc-1]);
                }
                
                // 크레인으로 빼낸 인형 자리를 0으로 초기화
                board[j][loc-1] = 0;
                
                break;
            }
        }
    }
                
    return answer;
}
728x90
반응형
복사했습니다!