프로그래머스 | 크레인 인형뽑기 게임 | 2019 카카오 겨울 인턴십 | Javascript

고광필·2022년 1월 26일
0

알고리즘

목록 보기
4/12

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의 마지막 값 (맨 위 인형)과 옮길 인형이 같으면 없애고, 다르면 인형을 옮깁니다.

주어진 조건들에서 바로 코딩이 가능하도록 해야겠습니다.

profile
이해하는 개발자를 희망하는 고광필입니다.

0개의 댓글