[프로그래머스]크레인 인형뽑기 게임

·2021년 11월 13일
0

코테문제풀기

목록 보기
51/57

문제확인

https://programmers.co.kr/learn/courses/30/lessons/64061

문제풀이

function solution(board, moves) {
  var basket = [];
  let selectedNum = 0;
  let result = 0;
  
  moves.forEach((j) => {
    for (let i = 0; i < board.length; i++) {
      if (board[i][j - 1] !== 0) {
        selectedNum = board[i][j - 1];
        board[i][j - 1] = 0;
        break;
      }
    }
      
    if (basket[basket.length - 1] === selectedNum) {
      basket.pop();
      result = result + 2;
    } else {
      if (selectedNum !== 0) {
        basket.push(selectedNum);
      } 
    }
    selectedNum = 0;
  });

  return result;
}

마지막에 selectedNum = 0;을 해줘야 하는 이유

const board = [
  [0,0,0,0,0],
  [0,0,1,0,3],
  [0,2,5,0,1],
  [4,2,4,4,2],
  [3,5,1,3,1]
]

const moves = [1, 5, 3, 5, 1, 2, 1, 4]; 

function solution(board, moves) {
  const basket = [];
  let selectedNum = 0;
  let result = 0;
  
  moves.forEach((j) => {
//현재 selectedNum이 2라고 가정
    for (let i = 0; i < board.length; i++) {
      //selectedNum이 2인상태
      //근데 현재 탐색하는 열이 모두 비었다면 = 모두 0이라면
      //0이 아닐 때 선택하라인데 모두 0이니까 여기 if문에 걸리지 않아서 선택을 하지 않음
      if (board[i][j - 1] !== 0) {
        selectedNum = board[i][j - 1];
        board[i][j - 1] = 0;
        break;
      }
    }

    //새로 선택안했기 때문에
    //여전히 selectedNum은 2인 상태
    //만약 basket의 마지막 요소가 selectedNum와 같다면(2라면) 없애버리고
    if (basket[basket.length - 1] === selectedNum) {
      basket.pop();
      result = result + 2;
    //같지 않더라도 잘못된 값(2)을 넣어버림
    //2가 이번 차례에 선택돼야 하는 숫자가 아니라 저번 차례에서 골랐는데 못 바꾼거니까 잘못된 값입니다
    } else {
      //추가로
      //0으로 초기화만 해주고 여기서 (selectedNum !== 0)를 검사해주지 않는다면
      //0은 빈 칸이니 선택도 할 수 없고 basket에 들어갈 수도 없는데
      //selectedNum은 0인데 push를 해버려서
      //만약 basket이 [2, 0, 2]이렇게 되면 삭제되어야할 2가 삭제되지 않아서 잘못됨
      //--------------------------------------------------------------
      //selectedNum이 이 부분까지 0일 수 있는 이유는 초기화를 0으로 해주고
      //selectedNum이 0으로 된 상태에서
      //위에 새로운 selectedNum을 고르는 if문이 0이 아닐 때 선택하라인데
      //열이 모두 비었다면(모두 0이라면) 새로운 값을 선택하지 못하고
      //여기까지 0이 내려옵니다
      if (selectedNum !== 0) {
        basket.push(selectedNum);
      } 
    }
    //결과적으로 잘못된 결과가 나오게 됨

    //그래서 0으로 초기화를 해줘야 합니다
    selectedNum = 0;
  });

  return result;
}

풀이과정

0개의 댓글