less than 1 minute read

image

문제 유형 : 스택


[제한사항]

board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다.

board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.

0은 빈 칸을 나타냅니다.

1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.

moves 배열의 크기는 1 이상 1,000 이하입니다.

moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.


해결방법

  1. move배열에 맞는 값의 위치에서 0이 아닌 값 == 인형을 하나 뽑아 스택에 저장
  2. 스택의 맨 위에 동일한 인형이 있으면 인형 두개를 스택에서 뺴고, 결과값+2를 한다.
  3. 인형을 뽑았으므로 인형이 있던 자리는 0으로 바꾸어 빈공간으로 바꾸어준다.

solution

스택을 사용하면 쉽게 끝나는 문제였다.

int solution(vector<vector<int>> triangle)
{
    int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    stack<int> s;
    for (int m = 0; m < moves.size(); m++) {
        int move_index = moves[m] - 1;
        for (int i = 0; i < board.size(); i++) {
            if (board[i][move_index] == 0) {
                //빈칸인 경우
                continue;
            }
            else {
                //인형을 집어서 바구니(스택)에 옮겨담는다.
                if (!s.empty() && s.top() == board[i][move_index]) {
                   s.pop();
                    answer += 2;
                }
                else {
                    s.push(board[i][move_index]);
                }
                //인형을 뽑았으므로 빈공간으로 바꿔준다.
                board[i][move_index] = 0;
                break;
            }
        }
    }
    return answer;
}


image 펑!

Tags:

Categories:

Updated: