Ch5-10~11. 배열 섞기
0. 목차
Chapter5. 배열
Ch5 - 10. 배열의 활용(3) 섞기(shuffle)
Ch5 - 11. 배열의 활용(4) 로또 번호 만들기
Ch5 - 10. 배열의 활용(3) 섞기(shuffle)
▶ 섞기?
▷ 배열의 요소의 순서를 반복해서 바꿈
▶ 숫자 섞기
▷ numArr[0] ↔ numArr[random] : 100번 반복
int numArr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(Arrays.toString(numArr));
for (int i = 0; i < 100; i++) {
int random = (int)(Math.random() * 10);
int tmp = numArr[0];
numArr[0] = numArr[random];
numArr[random] = tmp;
}
System.out.println(Arrays.toString(numArr));
// console
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 0, 3, 6, 2, 4, 1, 8, 9, 7]
- 계산과정
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 0번째 반복 numArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] random = 2 numArr[0] = 0 → tmp에 저장 numArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] tmp = 0 numArr[2(random)] = 2 → numArr[0] = 2에 붙여넣기 numArr = [2, 1, 2, 3, 4, 5, 6, 7, 8, 9] random = 2 tmp = 0를 → numArr[2(random)]에 저장 numArr = [2, 1, 0, 3, 4, 5, 6, 7, 8, 9] tmp = 0 1번째 반복 numArr = [2, 1, 0, 3, 4, 5, 6, 7, 8, 9] random = 5 numArr[0] = 2 → tmp에 저장 numArr = [2, 1, 0, 3, 4, 5, 6, 7, 8, 9] tmp = 2 numArr[5(random)] = 5 → numArr[0] = 5에 붙여넣기 numArr = [5, 1, 0, 3, 4, 5, 6, 7, 8, 9] random = 5 tmp = 2를 → numArr[5(random)]에 저장 numArr = [5, 1, 0, 3, 4, 2, 6, 7, 8, 9] tmp = 2 ... 98번째 반복 numArr = [0, 7, 3, 6, 2, 4, 1, 8, 9, 5] random = 1 numArr[0] = 0 → tmp에 저장 numArr = [0, 7, 3, 6, 2, 4, 1, 8, 9, 5] tmp = 0 numArr[1(random)] = 7 → numArr[0] = 7에 붙여넣기 numArr = [7, 7, 3, 6, 2, 4, 1, 8, 9, 5] random = 1 tmp = 0를 → numArr[1(random)]에 저장 numArr = [7, 0, 3, 6, 2, 4, 1, 8, 9, 5] tmp = 0 99번째 반복 numArr = [7, 0, 3, 6, 2, 4, 1, 8, 9, 5] random = 9 numArr[0] = 7 → tmp에 저장 numArr = [7, 0, 3, 6, 2, 4, 1, 8, 9, 5] tmp = 7 numArr[9(random)] = 5 → numArr[0] = 5에 붙여넣기 numArr = [5, 0, 3, 6, 2, 4, 1, 8, 9, 5] random = 9 tmp = 7를 → numArr[9(random)]에 저장 numArr = [5, 0, 3, 6, 2, 4, 1, 8, 9, 7] tmp = 7 [5, 0, 3, 6, 2, 4, 1, 8, 9, 7]
▷ numArr[0] ↔ numArr[random] : numArr.length 만큼 반복
int numArr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println("최초. " + Arrays.toString(numArr));
for (int i = 0; i < numArr.length; i++) {
int random = (int)(Math.random() * 10);
int tmp = numArr[i];
numArr[0] = numArr[random];
numArr[random] = tmp;
System.out.println(i + "번째 섞기. " + Arrays.toString(numArr));
}
System.out.println("최종. " + Arrays.toString(numArr));
// console
최초. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0번째 섞기. [9, 1, 2, 3, 4, 5, 6, 7, 8, 0]
1번째 섞기. [6, 1, 2, 3, 4, 5, 1, 7, 8, 0]
2번째 섞기. [2, 1, 2, 3, 4, 5, 1, 7, 8, 0]
3번째 섞기. [8, 1, 2, 3, 4, 5, 1, 7, 3, 0]
4번째 섞기. [4, 1, 2, 3, 4, 5, 1, 7, 3, 0]
5번째 섞기. [1, 5, 2, 3, 4, 5, 1, 7, 3, 0]
6번째 섞기. [5, 1, 2, 3, 4, 5, 1, 7, 3, 0]
7번째 섞기. [7, 1, 2, 3, 4, 5, 1, 7, 3, 0]
8번째 섞기. [1, 1, 2, 3, 4, 5, 3, 7, 3, 0]
9번째 섞기. [4, 1, 2, 3, 0, 5, 3, 7, 3, 0]
최종. [4, 1, 2, 3, 0, 5, 3, 7, 3, 0]
Ch5 - 11. 배열의 활용(4) 로또 번호 만들기
▶ 로또 번호 만들기
▷ 배열 45개에 값 넣기
int rotto[] = new int[45];
for (int i = 0; i < rotto.length; i++) {
rotto[i] = i + 1;
System.out.printf("[%d]", rotto[i]);
}
// console
[1][2][3][4][5][6][7][8][9][10]
...
[40][41][42][43][44][45]
▷ 6번 섞기
int rotto[] = new int[45];
for (int i = 0; i < rotto.length; i++) {
rotto[i] = i + 1;
}
for (int j = 0; j < 6; j++) {
int random = (int)(Math.random() * 45);
int tmp = rotto[j];
rotto[j] = rotto[random];
rotto[random] = tmp;
System.out.println(Arrays.toString(rotto));
}
// console
[44, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 42, 43, 1, 45]
[44, 6, 3, 4, 5, 2, 7, 8, 9, 10, ... 42, 43, 1, 45]
[44, 6, 27, 4, 5, 2, 7, 8, 9, 10, ... 42, 43, 1, 45]
[44, 6, 27, 18, 5, 2, 7, 8, 9, 10, ... 42, 43, 1, 45]
[44, 6, 27, 18, 25, 2, 7, 8, 9, 10, ... 42, 43, 1, 45]
[44, 6, 27, 18, 25, 35, 7, 8, 9, 10, ... 42, 43, 1, 45]
▷ 6개 당청번호 출력
int rotto[] = new int[45];
for (int i = 0; i < rotto.length; i++) {
rotto[i] = i + 1;
}
for (int j = 0; j < 6; j++) {
int random = (int)(Math.random() * 45);
int tmp = rotto[j];
rotto[j] = rotto[random];
rotto[random] = tmp;
}
for (int t = 0; t < 6; t++) {
System.out.printf("[%d]", rotto[t]);
}
// console
[7][6][4][44][19][23]