반응형
12-24 00:25
- Today
- Total
Link
개발하는 고라니
[Java] Shuffle 메서드 본문
반응형
정수형 1차원 배열 arr을 인자로 받아 정수형 1차원 배열을 반환하는 메서드 shuffle이다. 이 메서드는 인자로 받은 배열을 무작위로 섞어준다.
보통 셔플을 하면 원소가 중복되지 않게하기 위해 부가적인 처리가 필요한 경우가 있다. 하지만 이같은 경우는
배열의 원소를 직접 다루는 것이 아닌, 배열의 인덱스를 사용해 Swap을 하므로 값의 중복이 일어날 일이 발생하지 않는다.
static Integer[] shuffle(Integer[] arr) {
Random ran = new Random();
Integer[] result = arr;
for(int i=0; i<result.length; i++) {
int idx1 = ran.nextInt(result.length);
int idx2 = ran.nextInt(result.length);
int tmp = result[idx1];
result[idx1] = result[idx2];
result[idx2] = tmp;
}
return result;
}
아니면 List라는 Collection으로 변경해서 Collections.shuffle(Arrays.asList(arr))을 사용해도 된다. 단, 이를 사용하려면 int같은 Primitive타입은 적용되지 않으므로 Integer같은 래퍼객체로 변경해서 해줘야 적용된다.
# Code </>
package org.gorany.array;
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;
public class Program {
static Integer[] shuffle(Integer[] arr) {
Random ran = new Random();
Integer[] result = arr;
for(int i=0; i<result.length; i++) {
int idx1 = ran.nextInt(result.length);
int idx2 = ran.nextInt(result.length);
int tmp = result[idx1];
result[idx1] = result[idx2];
result[idx2] = tmp;
}
return result;
}
public static void main(String[] args) {
Integer[] nums = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21};
Integer[] copy = nums.clone();
System.out.println("# Original");
System.out.println(Arrays.toString(nums));
copy = shuffle(nums);
System.out.println("# Shuffle 메서드");
System.out.println(Arrays.toString(copy));
System.out.println("# Collections.shuffle()");
Collections.shuffle(Arrays.asList(nums));
System.out.println(Arrays.toString(nums));
}
}
반응형
'Languages > Java' 카테고리의 다른 글
[Java] 추상화 (0) | 2021.04.05 |
---|---|
[Java] 파일 입력과 EOF (0) | 2021.03.10 |
[Java] 상속 (0) | 2021.03.08 |
[Java] 클래스와 객체 (0) | 2021.03.01 |
[Java] 우선순위 큐(Priority Queue) (0) | 2021.01.28 |
Comments