쉬운 문제라 간단하게 원리만 설명하고 넘어가겠습니다!

문제설명

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

위의 링크를 참조해주시면 감사드립니다!

접근

  • 정해진 위치에서 인형을 잘 뽑아야 한다는 것과 바구니의 가장 위에 있는 인형과 같은 인형이 들어왔을 때 인형을 삭제시켜주면 된다.

내가 생각한 풀이

  • 문제 설명에서 간접적으로 힌트를 준 것 같은데 바구니를 stack으로 구현을 했다. 인형을 뽑을 때 마다 stack의 top과 비교를 하여 인형을 터뜨리고 answer에 2씩 더해준다.
  • 적절한 위치에서 인형을 뽑는 것은 for문을 통해 구현했다.

코드

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