먼저 주어진 board
2중배열의 경우를 해석해봤다.
위와 같은 형태를 띈다.
board[0][0] 원소의 위치는 가장 왼쪽 위가 되는 것.
이해한 바를 바탕으로 풀이를 시작했다.
function solution(board, moves) {
let stack = [];
let answer = 0;
// 크레인이 움직인 곳에 0이 아닌(인형이 있다면) 숫자가 있다면
// 해당 숫자를 뽑은 숫자 배열인 stack에 push하고 0으로 대치한다.
// 한번이라도 뽑았다면 그 아래의 인형은 뽑을 수 없기때문에 break로 빠져나온다.
moves.forEach((el) => {
for(let j = 0; j < board.length; j++){
if(board[j][el-1] != 0){
stack.push(board[j][el-1]);
board[j][el-1] = 0;
break;
}
}
})
// 뽑기가 모두 끝나고 쌓인 인형 배열에서 연속으로 같은 값이 나오면
// 문제 조건에서 언급한대로 배열에서 두 원소를 지운다.
// 원소가 사라지고 재배열된 인형을 처음부터 다시 탐색한다.
// 위의 과정을 거치며 중복되는 인형 없이 순회가 끝나면
// 해당 과정에서 지워진 인형의 총 갯수를 반환한다.
for(let k = 0; k < stack.length; k++){
if(stack[0] == stack[1]){
stack.shift();
stack.shift();
answer += 2;
} else
if(stack[k] == stack[k+1]){
stack.splice(k,2);
answer += 2;
k = 0;
}
}
return answer;
}