본문 바로가기
javaScript/JS Tutorial

[javaScript] 피셔 예이츠 셔플 - 무작위 순서로 배열 정렬

by mooyou 2022. 11. 7.
728x90
300x250
SMALL

무작위 순서로 배열을 정렬할 경우 간단하게 아래와 같이 해결할 수 있다.

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(){return 0.5 - Math.random()});

 

그러나 위의 예시를 사용할 경우 특정 순열의 빈도가 높기 때문에 정확한 결과를 얻을 수 없다.

 

https://ko.javascript.info/task/shuffle

 

배열 요소 무작위로 섞기

배열의 요소를 무작위로 섞어주는 함수 shuffle(array)을 작성해 보세요. shuffle을 여러 번 실행하면 요소의 정렬 순서가 달라야 합니다. 예시를 살펴봅시다. let arr = [1, 2, 3]; shuffle(arr); // arr = [3, 2, 1]

ko.javascript.info

이유는 위의 링크에 설명이 잘 되어있다.

 

그래서 이런 문제를 해결하는 방법으로 

피셔 예이츠 셔플을 이용할 수 있다.

 

const points = [40, 100, 1, 5, 25, 10];

for (let i = points.length -1; i > 0; i--) {
  let j = Math.floor(Math.random() * (i+1));
  let k = points[i];
  points[i] = points[j];
  points[j] = k;
}

피셔-예이츠 셔플 알고리즘은 배열 끝 요소에서 부터 시작해서 앞으로 하나씩 나아가면서 해당 요소 앞에 있는 임의 요소와 해당 요소를 바꿔치기 하는 알고리즘이다.

 

 

 

 

참고 : https://www.w3schools.com/js/js_array_sort.asp

728x90
반응형
LIST

댓글