더북(TheBook)
$form.addEventListener('submit', (event) => { 
  (중략)
  const candidate = Array(45).fill().map((v, i) => i + 1);
  const shuffle = []; 
  while (candidate.length > 0) { 
    const random = Math.floor(Math.random() * candidate.length); // 무작위 인덱스 뽑기
    const spliceArray = candidate.splice(random, 1); // 뽑은 값을 새로운 배열에 넣기 
    const value = spliceArray[0]; // 새로운 배열에 들어 있는 값 꺼내기
    shuffle.push(value); // 꺼낸 값을 shuffle 배열에 넣기
  }
  console.log(shuffle);
});

여기서 작성한 코드를 피셔-예이츠 셔플 알고리즘(Fisher-Yates Shuffle algorithm)이라고 합니다. 평소에 알고리즘이라는 단어를 많이 들어 봤을 겁니다. 이 단어를 들으면 복잡한 코드를 떠올리지만, 지금까지 작성한 코드도 모두 알고리즘입니다. 그저 코딩테스트 문제로 어려운 알고리즘을 내서 알고리즘은 어렵다는 편견이 있을 뿐입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.