티스토리 뷰

반응형

 

2차원 배열에서 인형을 뽑아서 다른 바구니로 옮기는데

같은 인형이 2개 연속으로 쌓이면 터진다. 

크레인의 모든 이동이 끝나고 난 후 바구니에서 인형이 몇 개 터졌는지 구하는 문제 


문제의 조건

 

1. 5x5 ~ 30x30 이하의 2차원 배열과 크레인이 몇 번 줄에서 인형을 뽑았는지 그 순서를 담은 1차원 배열이 주어짐 

 

2. 주어진 2차원 배열에는 인형의 위치를 표시한 숫자가 들어 있는데 

0이면 해당 위치에는 인형이 없다는 뜻이고

1 이상 숫자는 인형이 들어있다는 뜻임

 

3. 같은 숫자끼리 같은 인형이라고 간주함 

 

4. 크레인의 움직임을 담은 배열 원소의 크기는 1부터 시작함

-> 2차원 배열의 인덱스에 적용해서 비교하려면 (크레인의 움직임을 담은 배열) 원소에서 1을 빼줘야 함 

 


쉬운 문제였는데 스택에 값이 없을 때 예외처리를 해주지 않아서 계속 인덱스 에러가 나는 바람에 시간 잡아먹었던 문제 ㅠ.ㅠ

덕분에 하나 배웠읍니다,,,

 

#include <string>
#include <vector>
#include <stack>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    stack<int> stkBucket; //뽑은 인형을 담을 스택 

    for (int i = 0; moves.size() > i; i++)
    {
        int doll = 0;
        int CranePos = moves[i] - 1; //주어진 칸 번호에서 1을 빼야 배열 인덱스와 일치함 

        //위에서부터 세로 방향으로 내려가면서 0이 아닌 값(인형)을 찾는다.
        for (int j = 0; board.size() > j; j++)
        {
            if (0 != board[j][CranePos])
            {
                doll = board[j][CranePos];
                board[j][CranePos] = 0;
                break;
            }
        }

        //위 반복문에서 끝까지 내려갔는데 인형이 없어서 0을 push 할 수도 있으니까 아래 조건을 걸어줌 
        if (0 != doll)
        {
            //스택 size가 0인 상태에서 top 값과 비교하면 인덱스 에러나서 첫번째엔 무조건 넣어주도록 함
            if (0 == stkBucket.size()) 
            	stkBucket.push(doll);
            //top 값과 비교해서 다른 인형이면 스택에 넣기 
            else if (doll != stkBucket.top())
                stkBucket.push(doll);
            //top과 같으면 스택에서 빼고 팡 된 인형 2개 증가 
            else
            {
                stkBucket.pop();
                answer += 2;
            }
        }
    }

    return answer;
}

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함