[Programmers] 크레인 인형뽑기 게임 (JavaScript)
Algorithm

[Programmers] 크레인 인형뽑기 게임 (JavaScript)

반응형

문제 설명

게임화면인 2차원 배열과 크레인을 작동시킨 위치 배열이 주어졌을 경우 동일한 2개의 인형이 이웃하여 터진 모든 인형의 수를 구하는 문제

풀이과정 ✨

[stack, for ... of]

  1. 뽑은 인형들이 들어갈 stack 자료구조의 basket 생성
  2. index를 이용하여 답을 도춣해낼 것이기 때문에 첫번째 요소가 0인 moveIndexList를 새롭게 생성
  3. 2중 for ... of 문을 사용하여 행으로 구분된 전체 배열 `board 를 탐색함
  4. item (뽑기로 뽑은 아이템)이 존재할 때 해당 아이템이 basket의 마지막 아이템과 일치한다면 basket.pop()해주고 answer에 터진 아이템 개수를 더해줌
  5. 그렇지 않다면 basket의 마지막 요소로 push해줌
  6. 마지막으로 뽑은 자리의 인형번호를 0으로 재할당해줌

Code

function solution(board, moves) {
  let answer = 0;
  const basket = [];
  const moveIndexList = moves.map(num => num - 1);

  for(let moveIndex of moveIndexList) {
    for(let row of board) {
      const item = row[moveIndex];

      if(!!item) {
        if(item === basket[basket.length - 1]) {
          basket.pop()
          answer += 2
        } else {
          basket.push(item)
        }
        row[moveIndex] = 0
        break
      }
    }
  }
  return answer
}

시간 복잡도 O(n^2)

반응형