
13. Crane claw machine game
Sunhyup Lee. (2024). To be a successful candidate for the coding test. goldenrabbit. p.173.
Problem solving

Converted stack due to input value
Jay Tak
1. 스택을 이용한 접근법
function solution(board, moves) {
const lanes = [...Array(board[0].length)].map(() => []);
for (let i = board.length - 1; i >= 0; i--) {
for (let j = 0; j < board[0].length; j++) {
if (board[i][j]) {
lanes[j].push(board[i][j]);
}
}
}
const bucket = [];
let answer = 0;
for (const m of moves) {
if (lanes[m - 1].length > 0) {
const doll = lanes[m - 1].pop();
if (bucket.length > 0 && bucket[bucket.length - 1] === doll) {
bucket.pop();
answer += 2;
} else {
bucket.push(doll);
}
}
}
return answer;
}
🧐 Q. lanes 배열이 형성되는 과정에 대해서 살펴보면,
① 첫 번째 열 (lanes[0]
):
board[4][0] = 3
→lanes[0].push(3)
board[3][0] = 4
→lanes[0].push(4)
board[2][0] = 0
→ 아무 것도 안함.board[1][0] = 0
→ 아무 것도 안함.board[0][0] = 0
→ 아무 것도 안함.
② 두 번째 열 (lanes[1]
):
board[4][1] = 5
→lanes[1].push(5)
board[3][1] = 2
→lanes[1].push(2)
board[2][1] = 2
→lanes[1].push(2)
board[1][1] = 0
→ 아무 것도 안함.board[0][1] = 0
→ 아무 것도 안함.
③ 세 번째 열 (lanes[2]
):
board[4][2] = 1 → lanes[2].push(1)
board[3][2] = 4 → lanes[2].push(4)
board[2][2] = 5 → lanes[2].push(5)
board[1][2] = 1 → lanes[2].push(1)
board[0][2] = 0 → 아무 것도 안함.
④ 네 번째 열 (lanes[3]
):
board[4][3] = 3
→lanes[3].push(3)
board[3][3] = 4
→lanes[3].push(4)
board[2][3] = 0
→ 아무 것도 안함.board[1][3] = 0
→ 아무 것도 안함.board[0][3] = 0
→ 아무 것도 안함.
⑤ 다섯 번째 열 (lanes[4]
):
board[4][4] = 1
→lanes[4].push(1)
board[3][4] = 2
→lanes[4].push(2)
board[2][4] = 1
→lanes[4].push(1)
board[1][4] = 3
→lanes[4].push(3)
board[0][4] = 0
→ 아무 것도 안함.
⑥ 최종 lane 배열 상태
lanes = [
[3, 4], // 1열
[5, 2, 2], // 2열
[1, 4, 5, 1], // 3열
[3, 4], // 4열
[1, 2, 1, 3] // 5열
]
🧐 Q. 왜 board의 마지막 줄을 한번에 쫙 깔지 않았을까??
만약 board
의 마지막 행 전체를 한 번에 lanes
배열에 쫙 깔면, 이는 인형뽑기 기계의 가로형 구조 를 의미하게 됩니다. 즉, 각 열이 아니라 마지막 행의 모든 인형들이 동시에 꺼내질 수 있는 구조가 됩니다. 하지만 실제 인형뽑기 기계는 세로형 구조로, 사용자가 1열, 2열 등 특정 열을 선택하여 그 열에서만 인형이 위에서부터 하나씩 차례로 나오는 방식이죠.
이런 방식으로 구현한 이유는 다음과 같습니다:
- 인형뽑기 기계의 현실적인 동작을 모방하기 위해:
- 각 열은 독립적인 스택처럼 쌓이고, 사용자는 특정 열에서 인형을 꺼내게 됩니다.
- 만약
board
의 마지막 행의 인형을lanes
배열의 한 줄에 쫙 깔면, 열 단위로 인형을 처리할 수 없게 되고, 문제의 요구 사항과 맞지 않게 됩니다.
- 선택된 열에서만 인형을 꺼내기 위해:
- 각 열에 쌓인 인형들만 선택된 순서대로 꺼내야 하므로, 각 열마다 스택을 만들어 인형을 쌓고 관리하는 것이 더 적합합니다.
- 인형을 꺼낼 때는 다른 열에는 영향을 주지 않고, 오직 선택된 열에서만 인형이 나오게 하는 구조가 필요합니다.