https://school.programmers.co.kr/learn/courses/30/lessons/64061
function solution(board, moves) {
var answer = 0;
let stack = [];
moves.map((v) => {
for (let i = 0; i < board.length; i++) {
// moves로 몇번에서 뽑았는지 알 수 있으니 세로 행만 탐색
if (board[i][v - 1] === 0) {
continue;
} else {
stack.push(board[i][v - 1]);
board[i][v - 1] = 0; // 뽑힌 항목은 0으로 들어가게
break;
}
}
});
answer = Check(stack);
return answer;
}
function Check(stack) {
// 바구니에 담긴 마지막에 담긴항목과 그전 항목이 동일한가?를 판단
let answer = 0;
let flag = 0;
let cpStack = stack;
stack.map((v, index) => {
if (stack[index] === stack[index + 1]) {
stack.splice(index, 2);
answer += 2;
flag = 1;
}
});
if (flag === 1) {
return answer + Check(stack);
} else {
return answer;
}
}
두 항목이 같으면 사라지는 것을 위해 재귀를 사용했습니다.
그러나 그럴 필요가 없었어요.
function solution(board, moves) {
var count = 0;
var stack = [];
for (var i = 0; i < moves.length; i++) {
var now = moves[i] - 1;
for (var j = 0; j < board.length; j++) {
if (board[j][now] != 0) {
if (stack[stack.length - 1] === board[j][now]) { // 바구니에 넣을 때 바로 비교해서 같으면 pop해버리는 아이디어
stack.pop();
count += 2;
} else {
stack.push(board[j][now]);
}
board[j][now] = 0;
break;
}
}
}
return count;
}
넣을 때 바로 비해서 같으면 pop 해버리게 되면 바구니에 들어가지 않게 되니
재귀를 사용할 필요가 없이 그냥 for문안에서 해결이 된다.
풀고나서 저 포인트를 놓친 것 같아서 아쉬웠던 문제였다.