더북(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)이라고 합니다. 평소에 알고리즘이라는 단어를 많이 들어 봤을 겁니다. 이 단어를 들으면 복잡한 코드를 떠올리지만, 지금까지 작성한 코드도 모두 알고리즘입니다. 그저 코딩테스트 문제로 어려운 알고리즘을 내서 알고리즘은 어렵다는 편견이 있을 뿐입니다.