function solution(board, moves) {
let answer = 0;
let basket = new Array();
for (let i = 0; i < moves.length; i++) {
let pick = moves[i] - 1;
let doll = 0;
for (let j = 0; j < board.length; j++) {
if (board[j][pick] > 0) {
doll = board[j][pick];
board[j].splice(pick, 1, 0);
break;
}
}
if (doll > 0) {
basket.push(doll);
}
if (basket.length > 1) {
let last = basket[basket.length - 1];
let beforeLast = basket[basket.length - 2];
if (last === beforeLast) {
basket.splice(basket.length - 2, 2);
answer += 2;
}
}
}
return answer;
}
let board = [
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 3],
[0, 2, 5, 0, 1],
[4, 2, 4, 4, 2],
[3, 5, 1, 3, 1],
];
let moves = [1, 5, 3, 5, 1, 2, 1, 4];
basket: 뽑은 인형을 담는 배열
pick: moves 배열 값으로 선택되는 세로축 번호
doll: 뽑은 인형 번호, 0은 빈 공간
for (let j = 0; j < board.length; j++) {
if (board[j][pick] > 0) {
doll = board[j][pick];
board[j].splice(pick, 1, 0);
break;
}
}
board.length는 인형뽑기 깊이를 의미합니다. 인형 번호가 1 이상이고 빈 공간이 0입니다.
board[j][pick]가 0보다 큰 경우는 인형이 있다는 것이고 doll에 인형 번호를 줍니다.
그리고 splice 함수를 이용해 인형이 있던 자리값을 0으로 바꾸어 줍니다.
인형을 뽑았기 때문에 반복문을 종료합니다.
if (doll > 0) {
basket.push(doll);
}
board에서 인형을 뽑을 때 pick이 지정한 세로축에 인형이 없을 수도 있습니다!!
그러면 doll은 0인 상태인지 확인하고 basket에 인형을 담습니다.
if (basket.length > 1) {
let last = basket[basket.length - 1];
let beforeLast = basket[basket.length - 2];
if (last === beforeLast) {
basket.splice(basket.length - 2, 2);
answer += 2;
}
}
basket에 둘 이상이 있어야 뽑은 인형과 바로 전에 뽑은 인형을 비교할 수 있습니다.
방금 뽑은 인형과 이전에 뽑은 인형을 비교해 같다면
basket에서 이 둘을 splice를 이용해 제거합니다. 그리고 두 인형이 제거되었으므로 answer에 2를 더해줍니다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
Level 1 모의고사 (0) | 2020.07.08 |
---|