프로그래머스 :크레인 인형 뽑기 게임 [7]

문제 유형 : 스택
[제한사항]
board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다.
board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
0은 빈 칸을 나타냅니다.
1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
moves 배열의 크기는 1 이상 1,000 이하입니다.
moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.
해결방법
- move배열에 맞는 값의 위치에서 0이 아닌 값 == 인형을 하나 뽑아 스택에 저장
- 스택의 맨 위에 동일한 인형이 있으면 인형 두개를 스택에서 뺴고, 결과값+2를 한다.
- 인형을 뽑았으므로 인형이 있던 자리는 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;
}
펑!