안녕하세요 한주현입니다.
오늘은 자바로 배열을 랜덤하게 섞는 방법
에 대하여 알아보겠습니다.
문제 상황
입력값 -> 출력값
1부터 9까지 들어있는 배열을 넣으면 랜덤으로 섞어 출력하는 프로그램을 작성해봅시다.
입력:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
출력:
[9, 3, 1, 5, 4, 6, 7, 2, 8]
main 메서드 선언
아래 코드와 같이 배열 arr에 1부터 9까지 총 9개의 값을 갖는 배열을 선언합시다.
그리고 shuffle이란 클래스 메서드로 배열을 섞어 arr_random에 넣어 봅시다.
1 2 3 4 5 6 7 8 9 10 11 | class RandomArray{ public static void main(String[] args) { int[] arr = {1,2,3,4,5,6,7,8,9}; System.out.println(java.util.Arrays.toString(arr)); int[] arr_random = shuffle(arr); System.out.println(java.util.Arrays.toString(arr_random)); } } | cs |
shuffle 메서드 작성
int[]배열을 입력받아 랜덤으로 섞어 int[]배열을 반환하는 클래스 메서드 shuffle을 만들어봅시다
라인4: 배열의 크기만큼 for문을 돌립니다
라인5,6: 배열의 크기만큼의 인덱스를 얻는 정수를 얻어 각각 i, j 에 넣습니다
라인 8,9,10: tmp, arr[i], arr[j]에 넣으며 섞습니다 ㅎㅎ;;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class RandomArray { public static int[] shuffle(int[] arr){ for(int x=0;x<arr.length;x++){ int i = (int)(Math.random()*arr.length); int j = (int)(Math.random()*arr.length); int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } return arr; } public static void main(String[] args) { int[] original = {1,2,3,4,5,6,7,8,9}; System.out.println(java.util.Arrays.toString(original)); int[] result = shuffle(original); System.out.println(java.util.Arrays.toString(result)); } } | cs |
짠! 코드 완성 ㅎㅎㅎ
좀 더 추가적으로 섞고 싶으시다면,
라인4의 for문에서 x<arr.length 를 x<arr.length*2 로
배열의 두 배 만큼 섞는다면 더 많이 섞이겠지요?? ㅎㅎ
[보너스] 파이썬 방법
여담입니다만, 파이썬으로 배열 랜덤을 구현은 아래와 같이 합니다..
1 2 3 4 5 | >>> import random >>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> random.shuffle(l) >>> l [7, 2, 6 5, 1, 3, 8, 9, 4] | cs |
ㅎㅎㅎ.. 역시 짧군요
같은 기능을 여러 언어로 구현해 보는것은 각 언어의 특징도 잘 알 수 있고
프로그래밍 학습에 좋은 방향이라고 생각합니다!!!
여러분들도 해보세요 ㅎㅎ
오늘은 java 프로그래밍으로 배열의 랜덤 섞기에 대하여 알아봤습니다.
여러분들께 도움이 되셨음 좋겠습니다 ㅎㅎ.
다들 열공하시고!
그럼 다음 시간에 만나요!
'컴퓨터 > Java' 카테고리의 다른 글
[java] 문자열에서 정수형, double형으로 바꾸는 방법, 문자열에서 기본형으로 바꾸는 방법 - String to int, double (0) | 2017.12.30 |
---|---|
[java] 정수형에서 문자열로 변환 하는 두 가지 방법 - int to String (0) | 2017.12.30 |
[java] 현재 날짜, 시간 출력 - Date, SimpleDateFormat 클래스 (0) | 2017.12.25 |
[java] missing return statement - 원인 및 해결방법 (0) | 2017.12.21 |
[java] java.lang.ArrayIndexOutOfBoundsException 원인 및 해결방법 - 배열 정렬 및 최대값, 최소값 구하기 (0) | 2017.11.19 |
댓글