[JAVA] 9. 최종테스트(로또)

최재원's avatar
Feb 13, 2025
[JAVA] 9. 최종테스트(로또)
로또
1~45까지 6개의 숫자를 중복 없이 추첨한다.
오름차순 정렬
1, 13, 24, 33, 40, 45
// 배열 vs 컬렉션 // int -> Integer // double -> Double // String ArrayList<Integer> arr = new ArrayList(); arr.add(1); arr.add(2); arr.add(3); System.out.println(arr.get(0)); System.out.println(arr.get(1)); System.out.println(arr.get(2));

1. 하나하나 숫자 만들어서 배열에 넣어보기

package algo; import java.util.ArrayList; import java.util.Random; public class Lotto01 { public static void main(String[] args) { // 준비 int num = 0; int[] arr = new int[6]; // 1회전 num = 30; arr[0] = num; // 2회전 num = 13; arr[1] = num; // 3회전 num = 3; arr[2] = num; // 4회전 num = 35; arr[2] = num; // 5회전 num = 12; arr[2] = num; // 6회전 num = 5; arr[2] = num; for (int i = 0; i < 6; i++) { System.out.print(arr[i] + ", "); } } }
notion image

2. 랜덤숫자 생성 후 값이 중복 되면 넣지 않는다.

package algo; import java.util.ArrayList; import java.util.Random; public class Lotto02 { public static void main(String[] args) { // 준비 int num = 0; int[] arr = new int[6]; Random rand = new Random(); boolean isSameNum = false; // 1회 추첨 // [10] num = rand.nextInt(45) + 1; arr[0] = num; // 2회 추첨 // [10, 10] | [10, 13] num = rand.nextInt(45) + 1; if (arr[0] == num) { isSameNum = true; } if (!isSameNum) { arr[1] = num; } // 3회 추첨 // [10, 13, 10] | [10, 13, 14] num = rand.nextInt(45) + 1; if (arr[0] == num) { isSameNum = true; } if (arr[1] == num) { isSameNum = true; } if (!isSameNum) { arr[2] = num; } // 4회 추첨 // [10, 13 ,14, 13] | [10, 13, 14, 24] num = rand.nextInt(45) + 1; if (arr[0] == num) { isSameNum = true; } if (arr[1] == num) { isSameNum = true; } if (arr[2] == num) { isSameNum = true; } if (!isSameNum) { arr[3] = num; } // 5회 추첨 // [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35] num = rand.nextInt(45) + 1; if (arr[0] == num) { isSameNum = true; } if (arr[1] == num) { isSameNum = true; } if (arr[2] == num) { isSameNum = true; } if (arr[3] == num) { isSameNum = true; } if (!isSameNum) { arr[4] = num; } // 6회 추첨 // [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40] num = rand.nextInt(45) + 1; if (arr[0] == num) { isSameNum = true; } if (arr[1] == num) { isSameNum = true; } if (arr[2] == num) { isSameNum = true; } if (arr[3] == num) { isSameNum = true; } if (arr[4] == num) { isSameNum = true; } if (!isSameNum) { arr[5] = num; } for (int i = 0; i < 6; i++) { System.out.print(arr[i] + ", "); } } }
notion image

3. 공통모듈

package algo; import java.util.Random; public class Lotto03 { public static void main(String[] args) { // 준비 int num = 0; int[] arr = new int[6]; Random rand = new Random(); boolean isSameNum = false; // 1회 추첨 // [10] num = rand.nextInt(45) + 1; arr[0] = num; //------------------------------------------- int r = 1; // 2회 추첨 // [10, 10] | [10, 13] num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; } r++; // 3회 추첨 // [10, 13, 10] | [10, 13, 14] num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; } r++; // 4회 추첨 // [10, 13 ,14, 13] | [10, 13, 14, 24] num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; } r++; // 5회 추첨 // [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35] num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; } r++; // 6회 추첨 // [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40] num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; } r++; for (int i = 0; i < 6; i++) { System.out.print(arr[i] + ", "); } } }
notion image
notion image
notion image

4. 0이 안 나오게 만들어 보자

1. 0이 나오는 이유는 랜덤으로 추첨 한 숫자가 중복된 숫자이기 때문이다.

// 2회 추첨 // [10, 10] | [10, 13] num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; } if (isSameNum) { num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; } }
중복된 숫자가 나오면 배열에 저장하지 않고 넘어가기 때문에 0이 나온다.
그래서 중복값이 나와버리면 다시 처음부터 다시 반복해야 한다.
중복값이 안 나올 때 까지 무한 반복을 할 수 있기 때문에 while문을 사용해 보겠다.
package algo; import java.util.Random; public class Lotto04 { public static void main(String[] args) { // 준비 int num = 0; int[] arr = new int[6]; Random rand = new Random(); boolean isSameNum = false; // 1회 추첨 // [10] num = rand.nextInt(45) + 1; arr[0] = num; //------------------------------------------- int r = 1; // 2회 추첨 // [10, 10] | [10, 13] while (true) { num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; break; } } r++; // 3회 추첨 // [10, 13, 10] | [10, 13, 14] while (true) { num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; break; } } r++; // 4회 추첨 // [10, 13 ,14, 13] | [10, 13, 14, 24] while (true) { num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; break; } } r++; // 5회 추첨 // [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35] while (true) { num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; break; } } r++; // 6회 추첨 // [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40] while (true) { num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; } } if (!isSameNum) { arr[r] = num; break; } } r++; for (int i = 0; i < 6; i++) { System.out.print(arr[i] + ", "); } } }
notion image
notion image
notion image

5. 반복문으로 5회를 돌려보자

package algo; import java.util.Random; public class Lotto05 { public static void main(String[] args) { // 준비 int num = 0; int[] arr = new int[6]; Random rand = new Random(); boolean isSameNum = false; // 1회 추첨 // [10] num = rand.nextInt(45) + 1; arr[0] = num; //------------------------------------------- int r = 1; // 현재 배열 인덱스 위치 // 2회 추첨 // [10, 10] | [10, 13] // 3회 추첨 // [10, 13, 10] | [10, 13, 14] // 4회 추첨 // [10, 13 ,14, 13] | [10, 13, 14, 24] // 5회 추첨 // [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35] // 6회 추첨 // [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40] for (int j = 0; j < 5; j++) { while (true) { num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; break; // 중복 찾으면 다음 위치 확인 x } } if (!isSameNum) { arr[r] = num; break; } } r++; } for (int i = 0; i < 6; i++) { System.out.print(arr[i] + ", "); } } }
notion image
notion image
notion image
반복문을 돌릴 때 가끔 출력이 되지 않고 계속 실행되는 상황이 나타났다.

6. 오름차순 정렬을 해보자

package algo; import java.util.Random; import static algo.Bubble.bubble; public class Lotto06 { public static void main(String[] args) { // 준비 int num = 0; int[] arr = new int[6]; Random rand = new Random(); boolean isSameNum = false; // 1회 추첨 // [10] num = rand.nextInt(45) + 1; arr[0] = num; //------------------------------------------- int r = 1; // 현재 배열 인덱스 위치 // 2회 추첨 // [10, 10] | [10, 13] // 3회 추첨 // [10, 13, 10] | [10, 13, 14] // 4회 추첨 // [10, 13 ,14, 13] | [10, 13, 14, 24] // 5회 추첨 // [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35] // 6회 추첨 // [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40] for (int j = 0; j < 5; j++) { while (true) { isSameNum = false; // 초기화 해주지 않으면 while문 무한 반복 num = rand.nextInt(45) + 1; for (int i = 0; i < r; i++) { if (arr[i] == num) { isSameNum = true; break; // 중복 찾으면 다음 위치 확인 x } } if (!isSameNum) { arr[r] = num; break; } } r++; } int[] sortedArr = bubble(arr); for (int i = 0; i < 6; i++) { System.out.print(sortedArr[i] + ", "); } } }
notion image
notion image
notion image
Share article

jjack1