function solution(board, moves) {
var answer = 0;
const length = board.length;
const stack = [];
moves.forEach((move) => {
for (let i = 0; i < length; i++) {
const target = board[i][move - 1];
if (target) {
if (target === stack[stack.length - 1]) {
stack.pop();
answer += 2;
} else stack.push(target);
board[i][move - 1] = 0;
break;
}
}
});
return answer;
}
배열안의 배열의 접근법과 pop을 활용하는게 핵심인 것 같다
1. 뽑힌 인형을 담을 stack을 만든다
2. moves배열의 element하나하나당 for문을 돌아야 하는데 0번부터 n번전까지 돌아야한다(nxn 격자 주어졌을때)
- 집게가 위에서부터 접근하니 0번부터 시작해야한다
- 제일 처음발견되는 인형을 target으로 설정하고 target이 없으면 그냥 지나가도록 한다
- target=board[i][move-1]인 이유는 번째수를 index로 바꾸면 -1해줘야하고, move-1은 고정시켜주고 i만 바꾸면서 확인해야한다
- target이 stack에 있는 마지막인형과 일치하면 마지막인형 제거해주고 점수에 +2를 추가해준다
- 일치하지 않으면 stack에 target을 넣어준다
- target을 격자에서 제거해준다(board[i][move-1]=0)
- 중요한점은 target이 있으면(0이아니면) 4-5번을 해준뒤 break;해서
더이상 for문이 돌지 못하도록 해야한다