해결한 코드
function solution(board, moves) { let resultArr = []; let result = 0; let arr = new Array(board.length); for (let i = 0; i < arr.length; i++) { arr[i] = new Array(board.length); } for (let k = 0; k < board.length; k++) { for (let q = 0; q < board.length; q++) { arr[k][q] = board[q][k]; } } for (let n = 0; n < moves.length; n++) { let order = moves[n] - 1; for (let m = 0; m < board.length; m++) { const doll = arr[order][m]; if (doll) { arr[order][m] = 0; if ( resultArr.length !== 0 && resultArr[resultArr.length - 1] === doll ) { resultArr.pop(); result += 2; } else { resultArr.push(doll); } break; } } } return result; }
풀이
let arr = new Array(board.length); for (let i = 0; i < arr.length; i++) { arr[i] = new Array(board.length); } for (let k = 0; k < board.length; k++) { for (let q = 0; q < board.length; q++) { arr[k][q] = board[q][k]; } }
좀더 직관적인 뽑기를 위해 세로줄의 배열을 다시 새로 만들었다.
for (let n = 0; n < moves.length; n++) { let order = moves[n] - 1; for (let m = 0; m < board.length; m++) { const doll = arr[order][m]; if (doll) { arr[order][m] = 0; if ( resultArr.length !== 0 && resultArr[resultArr.length - 1] === doll ) { resultArr.pop(); result += 2; } else { resultArr.push(doll); } break; } } }
전달받는 move의 회수만큼 반복하고, 빈 공간이 아닌 인형을 뽑기 위해 board의 크기 만큼 반복한다
뽑은것이 인형이라면 if문에 들어가 그 자리를 0으로 만들고, 뽑기함에 넣어준다.
뽑은 인형의 숫자가 겹치면 인형을 삭제하고 결과값을 +2점 해준다.
뽑기함의 동작이 끝나면 다음 move로 이동해야하기 때문에 불필요한 반복으로 인한 오류를 방지하기 위해 break로 탈출하여 반복한다.