문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답
function solution(board, moves) {
let basket = [];
let answer = 0;
// moves의 길이 만큼 반복문을 돌린다
// board의 맨 윗줄부터 moves 위치를 체크한다
// 해당 줄의 moves 값이 0이면 다음 줄로 넘어간다
// 값이 0이 아닌 경우:
// 해당 값을 basket에 푸시한 뒤 0으로 교체한다
// 반복문에서 빠져나온다
for (let i = 0; i < moves.length; i++) {
for (let j = 0; j < board.length; j++) {
if (board[j][moves[i] - 1] > 0) {
basket.push(board[j][moves[i] - 1]);
board[j][moves[i] - 1] = 0;
break;
}
}
}
// basket은 뽑은 인형들을 세로로 쌓은 형태의 배열이다
// 동일한 값이 연속해서 두 번 등장할 때:
// 두 값을 배열에서 지우고 answer에 2를 더한다
// 배열의 상태가 바뀌었으므로 다시 처음부터 반복문을 돌려야 한다
// 그러기 위해 i를 -1로 초기화한다
// i를 0이 아니라 -1로 초기화하는 이유:
// i를 0으로 설정하면 i++에 의해 사실상 i가 1부터 시작되기 때문
for (let i = 0; i < basket.length; i++) {
if (basket[i] - basket[i + 1] === 0) {
basket.splice(i, 2);
answer += 2;
i = -1;
}
}
return answer;
}