본문 바로가기
문제 풀이/Programmers

[프로그래머스] 64061번: 크레인 인형뽑기 게임 (JavaScript)

by Electrohyun 2025. 7. 4.


 

생각 과정

 

마치 게임같은 구현 문제. 예전에 만들었던 C++ 스네이크 게임 생각나서 재밌게 풀었다.

 

인형뽑기 통은 차원 배열로 이루어져 있고, 그 이름은 board다.

 

board[세로][가로]와 같이 접근할 수 있고, 선택한 가로 번호는 moves - 1. 세로 번호는 0에서 1씩 늘어나며 배열의 요소를 탐색한다.

 

0이 아닌 요소(= 인형!)를 찾으면 해당 요소를 바구니에 담으며, 이 바구니는 스택처럼 이루어져 있으니 push와 pop 메서드를 활용하면 될 것이다.

 

바구니에 이미 들어있던 것과, 지금 추가한 것이 같다면 터져서 score가 2만큼 늘어난다.

 

이후, 배열에서 뽑은 인형 칸은 숫자 0이 들어갈 것이고, 다음 루프를 실행한다...

 

...

 

2중 for문은 각각 moves만큼, board의 세로 길이만큼 진행된다. (안쪽 for문의 경우 인형이 있으면 점수 추가 처리 후 break).

 

function pullDoll(board, column) {
  for (let i = 0; i < board.length; i++) {
    if (board[i][column] !== 0) {
      const doll = board[i][column];
      board[i][column] = 0;
      return doll;
    }
  }
  return null;
}

function addToBucket(bucket, doll) {
  if (!doll) return 0;
    
  if (bucket[bucket.length - 1] === doll) {
    bucket.pop();
    return 2;
  } else {
    bucket.push(doll);
    return 0;
  }
}

function solution(board, moves) {
  const bucket = [];
  let answer = 0;

  for (const move of moves) {
    const doll = pullDoll(board, move - 1);
    answer += addToBucket(bucket, doll);
  }

  return answer;
}