/ JAVAJUNGSUK

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]