[코테] 인형뽑기

404·2022년 6월 17일
0

코테&알고리즘

목록 보기
4/4
post-thumbnail

https://github.com/FUNco247/Co_Test_Solution/blob/master/pickDollGame.js

N * N 크기의 박스에서 인형을 뽑아 바구니에 아래부터 위로 쌓아 넣는다. 같은 인형이 바구니에 연달아 쌓이면 두 인형이 사라진다. 사라진 인형의 수를 구하는 문제다. 함수의 input으로는 처음 박스에 인형이 쌓여있는 형태가 층 단위 배열로 주어지고 인형을 뽑는 라인 번호가 순서대로 주어진다.

풀이

function solution(board, moves) {
  const boxSize = board.length;
  const verticalLine = [];
  for (let i = 0; i < boxSize; i++) {
    verticalLine[i] = [];
    for (let j = 0; j < boxSize; j++) {
      const dollNumber = board[j][i];
      if (dollNumber != 0) {
        verticalLine[i].push(dollNumber);
      }
    }
  }

인자를 입력받을 때 층별로 (가로방향) 으로 입력받으므로 뽑히는 순서대로 배열을 다시 정리하기 위해 가로형 배열을 세로형 배열로 바꿨다. 그리고 인형번호거 0인 곳은 인형이 없다는 뜻이기 때문에 0은 제외하고 배열에 push했다.

let basket = [0];
let popCount = 0;
for (let i = 0; i < moves.length; i++) {
  const pickLine = moves[i];
  const pickDoll = verticalLine[pickLine - 1][0];
  if (pickDoll != undefined) {
    if (basket[basket.length - 1] === pickDoll) {
      popCount += 2;
      basket.pop();
    } else {
      basket.push(pickDoll);
    }
    verticalLine[pickLine - 1].shift();
  }
}
return popCount;
}

레인 순서에 따라서 인형을 뽑아 basket 배열에 넣은 뒤 원 배열에서는 shift() 메소드를 사용해 삭제한다.
새로 배열에 숫자를(인형번호) 넣을때는 배열의 맨 마지막 숫자와 비교한 뒤 일치하지 않으면 넣고 일치하면 넣지 않고 basket배열의 맨 뒤 요소를 pop()으로 제거한 뒤 popCount를 증가시킨다.

배운점

  1. 배열의 맨 앞 요소를 추가하고 제거하는 메소드 .unshift() .shift() 맨 뒤 요소를 추가하고 제거하는 메소드 .push() .pop()이 어떻게 쓰일 수 있는지에 대한 좋은 연습이 되었다.

참고 블로그 https://hianna.tistory.com/395

  1. 추가로 배열에서 요소를 선택하여 제거하는 메소드인 splice() 에 대해서도 공부해야겠다. JS study 시리즈에 별도로 업로드 하도록!

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

느낀점

  1. 코테 풀이 속도가 굉장히 들쭉날쭉하다.... 걱정이다 ㅎㅎ 아직 몇문제 많이 풀어본것도 아니지만 그래도 꾸준히 하다보면 나아지리라 믿는다.
profile
T.T

0개의 댓글