[Java] 배열 랜덤 정렬, 2가지 방법
May 04, 2024
배열의 요소 순서를 랜덤하게 정렬하는 방법에 대해서 알아보겠습니다.
1. Collections.shuffle()을 이용한 방법
Collections.shuffle(list)
은 list를 랜덤하게 섞어서 정렬합니다.
Arrays.toString(array)
: array의 모든 요소 값들을 문자열로 리턴
이것을 이용하여, 배열을 리스트로 먼저 정렬 후에 shuffle()로 랜덤 정렬하고, 다시 리스트를 배열로 변환하는 방법이 있습니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Example {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
// 배열을 리스트로 변환
List<Integer> list = new ArrayList<>();
for (int num : array) {
list.add(num);
}
// 리스트 랜덤 정렬
Collections.shuffle(list);
// 리스트를 배열로 다시 변환
for (int i = 0; i < array.length; i++) {
array[i] = list.get(i);
}
System.out.println("array: " + Arrays.toString(array));
}
}
Output:
array: [5, 4, 3, 2, 1]
2. 직접 구현하는 방법
아래 예제는 for문을 이용하여 shuffle을 구현하였습니다. Random을 이용하여 루프를 돌면서 무작위 수를 뽑고, 배열의 값들을 변경합니다.
random.nextInt(i + 1)
: 0 ~ i 범위의 랜덤 숫자(index) 뽑음- 배열의 뒤에서 앞으로 순회하면서 랜덤하게 swap
import java.util.*;
public class Example {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
// 배열을 리스트로 변환
List<Integer> list = new ArrayList<>();
for (int num : array) {
list.add(num);
}
// 리스트 랜덤 정렬
Random random = new Random();
for (int i = array.length - 1; i > 0; i--) {
int j = random.nextInt(i + 1);
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
System.out.println("array: " + Arrays.toString(array));
}
}
Output:
array: [4, 3, 2, 1, 5]