프로그래머스 크레인 인형뽑기 게임 자바스크립트

버건디·2023년 4월 20일
0

프로그래머스

목록 보기
38/66

문제 링크

- 내 풀이 (틀린 답)

function solution(board, moves) {
  let cart = [];
  let answer = [];

  for (let i = 0; i < moves.length; i++) {
    let line = moves[i]; // 3
    for (let j = 0; j < board.length; j++) {
      if (board[j][line - 1] !== 0) {
        cart.push(board[j][line - 1]);
        board[j][line - 1] = 0;
        break;
      }
    }
  }

  // [4, 4, 1, 1, 2, 2]

  for (let k = 0; k < cart.length; k++) {
    if (cart[k] === cart[k + 1]) {
      answer.push(cart[k], cart[k]);
      cart.splice(k, 2);
      k = 0; // 초기화 안됨.  -1로 해야함
    }
  }

  return cart;
}

먼저 배열을 돌면서 moves 값에 맞는 인형 숫자들을 cart 배열에 넣어주고 cart 배열에서 나란히 같은 값들이 있다면 그 값들을 answer 배열에 넣어주어서 length 값을 구하려했다.

for문을 돌면서 cart배열에 중복된 인형 숫자가 있을때 k를 다시 초기화를 해주려고 k = 0 코드를 넣었는데 초기화가 되지 않았다.

for문의 구조 순서를 다시 이해해야했다.

for(초기문, 조건문 ,증감문){
  1. 초기문이 실행된다.
  2. 조건문이 참일때 이 코드 블록안의 코드가 실행된다.
  3. 증감문이 실행된다.
  4. 조건문으로 다시 돌아간다 
}

의 순서인데 k = 0 으로 코드 블록 안에 초기화를 해준다고 하더라도, 그 후에 증감문이 실행되는것이기 때문에 k 는 다시 1로 되는거였다.

그렇기 때문에 저 i문이 참일때, k를 -1 로 초기화를 해주어야지 그 후에 증감문이 실행되면서 k가 0부터 다시 배열을 순회하는것이다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글

관련 채용 정보