링크
function solution(board, moves) {
let count = 0
let basket = []
moves.forEach(move => {
board.find(row => {
if (row[move - 1] > 0) {
basket.push(row[move - 1])
row[move - 1] = 0
return true
} else {
return false
}
})
if ((basket.length > 1) && (basket[basket.length - 1] === basket[basket.length - 2 ])) {
basket = basket.slice(0, -2)
count += 2
}
})
return count
}
문제풀이 생각
1. moves에서 우선 차례대로 값을 확인한다.
2. board에서 한 줄씩 돌며 moves의 값에 해당하는 인덱스에서 우선 찾아지는 값을 바구니에 넣는다.
3. 바구니의 마지막 2개의 값이 같다면 바구니의 마지막 2개의 값을 제거한 후 카운트를 두 개 늘린다.
(+ 바구니의 개수가 1개보다 많고 ...)
4. 1~4의 작업을 반복한다.
5. 카운트를 반환한다.
알게된 점
- 히든 케이스 1,2번이 실패해서 이유를 알아보다 바구니의 갯수가 2개가 아닐 경우에도 카운트를 실행하는 경우가 발생할 수 있다는 것을 알았다. (moves가 인형이 없는 부분을 선택했을 경우) 예상하지 못한 변수에 대해서 어떻게 대비할 수 있을까?
slice
로 반환되는 array
를 재할당 하지 않고 splice 를 이용해 뒤쪽에서 2개를 제거하는 로직이었을 때는 미세한 차이이지만 속도가 좀 더 느려졌다.