배열의 요소 순서를 랜덤하게 정렬하는 방법에 대해서 알아보겠습니다.

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]