https://github.com/FUNco247/Co_Test_Solution/blob/master/pickDollGame.js
N * N 크기의 박스에서 인형을 뽑아 바구니에 아래부터 위로 쌓아 넣는다. 같은 인형이 바구니에 연달아 쌓이면 두 인형이 사라진다. 사라진 인형의 수를 구하는 문제다. 함수의 input으로는 처음 박스에 인형이 쌓여있는 형태가 층 단위 배열로 주어지고 인형을 뽑는 라인 번호가 순서대로 주어진다.
function solution(board, moves) {
const boxSize = board.length;
const verticalLine = [];
for (let i = 0; i < boxSize; i++) {
verticalLine[i] = [];
for (let j = 0; j < boxSize; j++) {
const dollNumber = board[j][i];
if (dollNumber != 0) {
verticalLine[i].push(dollNumber);
}
}
}
인자를 입력받을 때 층별로 (가로방향) 으로 입력받으므로 뽑히는 순서대로 배열을 다시 정리하기 위해 가로형 배열을 세로형 배열로 바꿨다. 그리고 인형번호거 0인 곳은 인형이 없다는 뜻이기 때문에 0은 제외하고 배열에 push했다.
let basket = [0];
let popCount = 0;
for (let i = 0; i < moves.length; i++) {
const pickLine = moves[i];
const pickDoll = verticalLine[pickLine - 1][0];
if (pickDoll != undefined) {
if (basket[basket.length - 1] === pickDoll) {
popCount += 2;
basket.pop();
} else {
basket.push(pickDoll);
}
verticalLine[pickLine - 1].shift();
}
}
return popCount;
}
레인 순서에 따라서 인형을 뽑아 basket
배열에 넣은 뒤 원 배열에서는 shift()
메소드를 사용해 삭제한다.
새로 배열에 숫자를(인형번호) 넣을때는 배열의 맨 마지막 숫자와 비교한 뒤 일치하지 않으면 넣고 일치하면 넣지 않고 basket
배열의 맨 뒤 요소를 pop()
으로 제거한 뒤 popCount
를 증가시킨다.
.unshift() .shift()
맨 뒤 요소를 추가하고 제거하는 메소드 .push() .pop()
이 어떻게 쓰일 수 있는지에 대한 좋은 연습이 되었다. splice()
에 대해서도 공부해야겠다. JS study 시리즈에 별도로 업로드 하도록!https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice