https://programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스에 올라온 2019 카카오 겨울인턴십 문제였던
크레인 인형뽑기 게임 문제를 풀어보았습니다.
function solution(board, moves) {
let new_board = [[], [], [], [], []];
for (let i in board) {
for (let i2 in board[i]) {
new_board[i][4 - i2] = board[i2][i];
}
}
moves = moves.map((move) => move - 1);
let result = [];
let answer = 0;
for (let move of moves) {
let i3 = new_board[move].filter(Boolean).length;
if (i3) {
result.push(new_board[move][i3 - 1]);
new_board[move][i3 - 1] = 0;
}
const len = result.length;
if (len > 1 && result[len - 1] === result[len - 2]) {
result.pop();
result.pop();
answer += 2;
}
}
return answer;
}
board를 새로 만드는게 pop하기가 쉬울것같아서
새로 board를 만드는걸로 코딩을 했습니다.
그러나 일부 문제 정답 / 일부 문제 런타임에러가 났고, 카카오 기술블로그의 풀이를 보고 다시 코드를 작성했습니다.
function solution(board, moves) {
const n = board.length;
let result = [];
let answer = 0;
for (let move of moves) {
for (let i = 0; i < n; i++) {
if (board[i][move - 1]) {
if (result[result.length - 1] === board[i][move - 1]) {
result.pop();
answer += 2;
} else result.push(board[i][move - 1]);
board[i][move - 1] = 0;
break;
}
continue;
}
}
return answer;
}
주어진 board에서도 반복문을 돌기가 수월했습니다.
moves를 순회하면서 0이 아닌 인형이 있는것을 찾습니다.
인형이 없으면 아무 동작도 하지 않고
인형이 있으면 인형을 옮기는데, result의 마지막 값 (맨 위 인형)과 옮길 인형이 같으면 없애고, 다르면 인형을 옮깁니다.
주어진 조건들에서 바로 코딩이 가능하도록 해야겠습니다.