https://programmers.co.kr/learn/courses/30/lessons/64061?language=javascript
크레인이 작동하여 인형을 뽑고 같은 모형의 인형 2개를 동시에 뽑았다면 return 값에 2를 더해주는 내용의 문제
[제한사항]
board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
0은 빈 칸을 나타냅니다.
1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
moves 배열의 크기는 1 이상 1,000 이하입니다.
moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.
board | moves | result |
---|---|---|
[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] | [1,5,3,5,1,2,1,4] | 4 |
function solution(board, moves) {
var answer = 0;
let stacks = [];
for (let i = 0; i < moves.length; i++) {
for (let j = 0; j < board.length; j++) {
if (board[j][moves[i] - 1]) {
if (stacks[stacks.length - 1] === board[j][moves[i] - 1]) {
stacks.pop();
answer += 2;
} else {
stacks.push(board[j][moves[i] - 1]);
}
board[j][moves[i] - 1] = 0;
break;
}
}
}
return answer;
}
무브를 반복 돌리면서 라인에 대해서 보드를 밑으로 내리고 0이 아닐 경우 스택에 넣어주는데 스택에 마지막 요소가 넣어주는 값과 같다면 마지막 요소를 빼주고 정답+2 를 더해준다. 그리고 아닌경우는 스택에 넣어준다. 마지막으로 뽑은 인형자리를 0으로 만들어 준뒤 break를 통해 반복문을 빠져나온다. 그렇지 않으면 계속 같은곳의 인형을 뽑기 때문에.