정말 푸는데 족히 2시간은 걸린 문제.. 생각한 수도코드에 대한 로직을 짜는데는 오래걸리지 않았지만, TC 1번 2번 (ex. [[0,0,0,0], [0,0,0,0], [0,0,0,0,], [0,0,0,0,]], [1,2,3,4]) 같은 곳에 에러처리를 하지 않아 한참을 걸렸다. 그래서 console로 한참을 찍다 undefined로 이루어진 배열임을 확인하고 그에대한 처리를 해주느라 오래걸린 것 같다 (괜히 복잡하게 생각해선..)
function solution(board, moves) {
// 각 층으로 주어진 배열을 각 컬럼별로 바꾸는 코드
// sortBoard라는 곳에 각 배열의 i에 해당하는 값들을 넣어주면 된다
const sortBoard = board.map( (_, i) => board.map(row => row[i]) );
let busket = [];
let ans = 0;
// for문을 돌며 0보다 큰 값을 발견시 (find - 값 반환) 그 값을 busket에 넣어주고
// 발견했던 애의 인덱스 (findIndex - 인덱스반환)을 저장하여 기존 배열을 0으로 바꿔줌
for (i=0; i<moves.length; i++) {
k = sortBoard[moves[i]-1].find( v => v > 0)
index = sortBoard[moves[i]-1].findIndex( v => v > 0)
// 뺸 값을 넣기
busket.push(k)
// 빼준 곳은 0으로 바꾸기
sortBoard[moves[i]-1].splice(index, 1, 0)
// undefined로 이루어진 배열의 에러처리를 해주기 위해 값이 존재할 때라는 조건을 추가
if (busket[busket.length-1] && busket[busket.length-2] === busket[busket.length-1]) {
ans+=2
busket.pop()
busket.pop()
}
}
return ans
}
// TC의 예상 결과 -> 1 1 삭제 후 3 3 삭제 즉, 총 4개 삭제.
// 4 3 1 1 3 2 X 4