크레인 인형뽑기게임

YoungjunKim·2022년 10월 3일
0

Algorithm

목록 보기
7/8
post-thumbnail




해결한 코드

function solution(board, moves) {
  let resultArr = [];
  let result = 0;
  let arr = new Array(board.length);
  for (let i = 0; i < arr.length; i++) {
    arr[i] = new Array(board.length);
  }
  for (let k = 0; k < board.length; k++) {
    for (let q = 0; q < board.length; q++) {
      arr[k][q] = board[q][k];
    }
  }
for (let n = 0; n < moves.length; n++) {
    let order = moves[n] - 1;
    for (let m = 0; m < board.length; m++) {
      const doll = arr[order][m];
if (doll) {
        arr[order][m] = 0;
        if (
          resultArr.length !== 0 &&
          resultArr[resultArr.length - 1] === doll
        ) {
          resultArr.pop();
          result += 2;
        } else {
          resultArr.push(doll);
        }
        break;
      }
    }
  }
  return result;
}

풀이

  let arr = new Array(board.length);
  for (let i = 0; i < arr.length; i++) {
    arr[i] = new Array(board.length);
  }
  for (let k = 0; k < board.length; k++) {
    for (let q = 0; q < board.length; q++) {
      arr[k][q] = board[q][k];
    }
  }

좀더 직관적인 뽑기를 위해 세로줄의 배열을 다시 새로 만들었다.

for (let n = 0; n < moves.length; n++) {
    let order = moves[n] - 1;
    for (let m = 0; m < board.length; m++) {
      const doll = arr[order][m];
if (doll) {
        arr[order][m] = 0;
        if (
          resultArr.length !== 0 &&
          resultArr[resultArr.length - 1] === doll
        ) {
          resultArr.pop();
          result += 2;
        } else {
          resultArr.push(doll);
        }
        break;
      }
    }
  }

전달받는 move의 회수만큼 반복하고, 빈 공간이 아닌 인형을 뽑기 위해 board의 크기 만큼 반복한다
뽑은것이 인형이라면 if문에 들어가 그 자리를 0으로 만들고, 뽑기함에 넣어준다.
뽑은 인형의 숫자가 겹치면 인형을 삭제하고 결과값을 +2점 해준다.
뽑기함의 동작이 끝나면 다음 move로 이동해야하기 때문에 불필요한 반복으로 인한 오류를 방지하기 위해 break로 탈출하여 반복한다.

profile
개발신입

0개의 댓글