스택큐힙리스트

자바스크립트 배열을 랜덤하게 재정렬(셔플)하는 방법? 본문

카테고리 없음

자바스크립트 배열을 랜덤하게 재정렬(셔플)하는 방법?

스택큐힙리스트 2024. 1. 31. 02:03
반응형

이렇게 배열이 있습니다:


var arr1 = [a, b, c, d];

이를 어떻게 무작위로 섞을 수 있을까요?

답변 1

사실적으로 공정한 섞기 알고리즘은 Fisher-Yates(일명 Knuth) 섞기 입니다.


여기에서 훌륭한 시각화를 볼 수 있습니다 (그리고 원본 글은 이곳에 링크되어 있습니다)



function shuffle(array) {
let currentIndex = array.length, randomIndex;
// 남은 요소가 있는 동안만.
while (currentIndex > 0) {
// 남은 요소 중 하나 선택.
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
// 현재 요소와 선택한 요소를 교환.
[array[currentIndex], array[randomIndex]] = [
array[randomIndex], array[currentIndex]];
}
return array;
}
// 다음과 같이 사용될 수 있음.
var arr = [2, 11, 37, 42];
shuffle(arr);
console.log(arr);



이 알고리즘에 대한 추가 정보.

답변 2

어떻게 JavaScript 배열을 무작위로 섞을 수 있을까요? 배열을 무작위로 섞는 방법에 대해 알아보려면 다양한 방법과 기술을 활용할 수 있습니다. 이들을 살펴보고자 하겠습니다. JavaScript에서 고유한 무작위 정렬 기능을 구현하려면 Fisher-Yates 알고리즘을 사용하여 배열 요소를 섞을 수 있습니다.
처음으로 Fisher-Yates 알고리즘을 통해 배열을 섞는 방법을 알아보겠습니다. 이 알고리즘은 원래 Knuth-Fisher-Yates 셔플 알고리즘으로 알려져 있으며, 배열을 효과적으로 섞을 수 있는 방법 중 하나입니다. 이 알고리즘은 배열의 모든 요소를 앞과 뒤에서부터 순차적으로 탐색하면서 각 요소를 무작위로 선택한 다음 현재 위치와 선택한 위치의 요소를 서로 교환합니다. 이 과정을 배열의 모든 요소에 대해 반복하면, 배열이 무작위로 섞이게 됩니다. 이 알고리즘의 시간 복잡도는 O(n) 이며, 0부터 n-1까지의 인덱스 범위 내에서 요소를 무작위로 선택하기 때문에 고유하고 효과적인 무작위 정렬을 제공합니다.
예를 들어, Fisher-Yates 알고리즘을 사용하여 JavaScript 배열을 섞는 코드를 살펴보겠습니다.
```javascript
function shuffleArray(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// 배열의 모든 요소에 대해 반복
while (0 !== currentIndex) {
// 무작위로 선택한 위치의 요소와 현재 위치의 요소를 교환
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
// 사용 예시
var myArray = [1, 2, 3, 4, 5];
console.log(shuffleArray(myArray));
```
위의 코드는 shuffleArray라는 함수를 정의하고, Fisher-Yates 알고리즘을 사용하여 입력된 배열을 섞은 후 결과 배열을 반환합니다. Math.random() 함수를 통해 0 이상 1 미만의 무작위한 실수를 생성하고, currentIndex 변수를 통해 현재 위치를 추적하여 배열의 모든 요소를 순회하면서 요소를 교환하는 과정을 반복합니다. 마지막으로, 섞여진 배열을 반환합니다.
이 방법을 사용하면 JavaScript 배열을 무작위로 섞을 수 있고, 이를 활용하여 다양한 활동에 유용하게 사용할 수 있습니다. Fisher-Yates 알고리즘은 배열 요소의 순서를 쉽게 섞을 수 있는 효과적인 방법입니다. 이 어떠한 방법도 사용자에게 무작위한 결과를 제공하며, 홈페이지나 게임, 데이터 처리 등 다양한 문제에서 활용될 수 있습니다.

반응형
Comments