inblog logo
|
sxias
    자바

    [JAVA] 26. 최종 테스트 - 로또

    문정준's avatar
    문정준
    Feb 11, 2025
    [JAVA] 26. 최종 테스트 - 로또
    Contents
    ArrayList - Collection로또 문제문제 분석코드 작성 - Sampling, Moduling결과
     

    ArrayList - Collection

    • 배열 vs 컬렉션
    • 배열 : 수정 및 검색 가능, 인덱스 추가 및 삭제는 불가
    • 컬렉션 : 데이터가 띄엄띄엄 들어감, 다음 번지의 주소 저장
      • 데이터 추가, 삭제, 수정, 검색 가능
     
    notion image
     
    notion image
     
    package algo; import java.util.ArrayList; public class Lotto01 { public static void main(String[] args) { // 배열 vs 컬렉션 // int -> Integer // double -> Double // String -> String ArrayList<Integer> arr = new ArrayList<Integer>(); arr.add(1); arr.add(3); arr.add(5); System.out.println(arr.get(0)); System.out.println(arr.get(1)); System.out.println(arr.get(2)); } }
     

    로또 문제

    • 1 ~ 45의 수 중 중복되지 않는 무작위의 6개의 수를 출력하시오.
     

    문제 분석

    • 무작위의 수 : 난수 활용 = Math.random()
    • 숫자가 나오는 대로 배열에 추가 : 배열 or 컬렉션 활용
    • 중복 방지 : 같은 수일 경우 저장 X
     

    코드 작성 - Sampling, Moduling

    package algo; import java.util.ArrayList; import java.util.Random; public class Lotto01 { public static void main(String[] args) { // 1. Sampling : 1 ~ 45까지의 중복되지 않는 6개의 수를 추출하시오. // 2. Hard Coding : 특징 찾기 // 1. 난수 활용 필요 : Random 패키지 사용 // 2. 6개의 수를 뽑고, 저장이 필요 : 배열 사용 // 3. 중복되지 않기 위해서 이전의 인덱스와 비교가 필요 // 중복 시? 다시 번호 추첨 // 4. for의 횟수는 정해져 있는데 어떻게 계속 반복? : i를 감소 // 5. 중복 확인 시 : 값 저장에 사용하는 for 변수 i = j + 1 // 6. 첫 번째 값은 무조건 넣고, 두 번째부터는 현재 인덱스 전의 값 까지만 비교하려면? // 배열 vs 컬렉션 // int -> Integer // double -> Double // String -> String // ArrayList<Integer> arr = new ArrayList<Integer>(); // 이 예제에서는 배열을 사용하기 때문에 컬렉션은 주석 처리함. int[] arr2 = new int[6]; Random rand = new Random(); // 3-1. 숫자 정렬을 위한 버블정렬 함수 클래스 선언 Uc f = new Uc(); // 3. Moduling for (int i = 0; i < 6; i++) { // 3-2. 난수를 뽑기 위한 Random() 클래스 int number = rand.nextInt(45) + 1; // 1 ~ 45의 수 // 3-3. 예외 1 : 첫 항은 무조건 배열에 삽입 if (i == 0) arr2[i] = number; else { for (int j = 0; j < i; j++) { // 3-4. 중복이 아닐 경우 배열에 저장 if (arr2[j] != number) arr2[i] = number; // 3-5. 예외 2 : 중복일 경우 i를 1 감소시킨 후 다시 난수 추출 // j = i - 1을 대입함으로써 중복 체크용 반복문 바로 종료 else { i--; j = i - 1; } } } } // 결과 출력 System.out.print("당첨 번호 : "); // 3-6. 결과 버블 정렬 (오름차순) int[] result = f.bubble(arr2); for (int i = 0; i < result.length; i++) { System.out.print(result[i] + " "); } } }
    ✅
    Hard Coding과 Moduling을 통해 알아낸 특징
    1. 난수 활용 필요 : Random 패키지 사용 (Boundary 지정 가능)
    1. 6개의 수를 뽑고, 저장이 필요 : 배열 사용 (컬렉션을 사용해도 됨)
    1. 중복되지 않기 위해서 이전의 인덱스와 비교가 필요
        • 중복 시? 다시 번호 추첨
          • 중복일 경우 i를 1 감소시킨 후 다시 난수 추출
          • j = i - 1을 대입함으로써 중복 체크용 반복문 바로 종료
    1. for의 횟수는 정해져 있는데 어떻게 계속 반복? : i를 감소
    1. 중복 확인 시 : 값 저장에 사용하는 for 변수 i = j + 1
    1. 첫 번째 값은 무조건 넣고, 두 번째부터는 현재 인덱스 전의 값 까지만 비교하려면?
        • j < i의 조건은 동일하되, i를 무조건 한 번 실행시키면 됨.
     

    결과

    • 1회차
    notion image
    • 2회차
    notion image
    • 3회차
    notion image
    Share article
    Contents
    ArrayList - Collection로또 문제문제 분석코드 작성 - Sampling, Moduling결과

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog