function solution(board, moves) {
let cart = [];
let answer = [];
for (let i = 0; i < moves.length; i++) {
let line = moves[i]; // 3
for (let j = 0; j < board.length; j++) {
if (board[j][line - 1] !== 0) {
cart.push(board[j][line - 1]);
board[j][line - 1] = 0;
break;
}
}
}
// [4, 4, 1, 1, 2, 2]
for (let k = 0; k < cart.length; k++) {
if (cart[k] === cart[k + 1]) {
answer.push(cart[k], cart[k]);
cart.splice(k, 2);
k = 0; // 초기화 안됨. -1로 해야함
}
}
return cart;
}
먼저 배열을 돌면서 moves 값에 맞는 인형 숫자들을 cart 배열에 넣어주고 cart 배열에서 나란히 같은 값들이 있다면 그 값들을 answer 배열에 넣어주어서 length 값을 구하려했다.
for문을 돌면서 cart배열에 중복된 인형 숫자가 있을때 k를 다시 초기화를 해주려고 k = 0 코드를 넣었는데 초기화가 되지 않았다.
for문의 구조 순서를 다시 이해해야했다.
for(초기문, 조건문 ,증감문){
1. 초기문이 실행된다.
2. 조건문이 참일때 이 코드 블록안의 코드가 실행된다.
3. 증감문이 실행된다.
4. 조건문으로 다시 돌아간다
}
의 순서인데 k = 0 으로 코드 블록 안에 초기화를 해준다고 하더라도, 그 후에 증감문이 실행되는것이기 때문에 k 는 다시 1로 되는거였다.
그렇기 때문에 저 i문이 참일때, k를 -1 로 초기화를 해주어야지 그 후에 증감문이 실행되면서 k가 0부터 다시 배열을 순회하는것이다.