본문 바로가기
프로그래밍 기초/Java Festival

[Java Festival] 18. 중복 없이 숫자를 뽑는 로또 프로그램

by 제이투더문 2024. 6. 30.

 

 안녕하세요, 작가 J입니다. 이번에는 중복 없이 숫자를 뽑아 로또 프로그램을 만드는 방법에 대해 알아보겠습니다. 이 예제는 난수 생성과 중복 방지, 그리고 반복문을 활용하는 데 도움이 될 것입니다.

 

[Java Festival 18] 중복 없이 숫자를 뽑는 로또 프로그램

중복이 없이 숫자를 뽑는 로또 프로그램을 만드시오

 

 

 

문제 분석

이 문제는 다음과 같은 단계를 통해 해결할 수 있습니다:

  1. 1부터 45 사이의 숫자 중 6개의 숫자를 랜덤으로 뽑습니다.
  2. 중복되지 않도록 숫자를 저장합니다.
  3. 뽑은 숫자를 출력합니다.

코드 풀이

코드 풀이 1: 이중 반복문을 이용한 중복 방지

package Ex;

import java.util.Random;

public class Ex18 {
    public static void main(String[] args) {
        Random rd = new Random(); // 랜덤 숫자 생성을 위한 Random 객체 생성
        int[] lotto = new int[6]; // 6개의 숫자를 저장할 배열 선언
        
        for (int i = 0; i < lotto.length; i++) {
            lotto[i] = rd.nextInt(45) + 1; // 1부터 45 사이의 랜덤 숫자 생성
            for (int j = 0; j < i; j++) {
                if (lotto[i] == lotto[j]) { // 중복 검사
                    i--; // 중복되면 현재 인덱스를 감소시켜 다시 숫자 생성
                    break; // 중복 검사 루프 탈출
                }
            }
        }
        
        for (int i : lotto) {
            System.out.println("행운의 숫자 : " + i); // 결과 출력
        }
    }
}

 

코드 설명

1. 랜덤 숫자 생성 및 저장

이중 반복문을 사용하여 중복 없이 랜덤 숫자를 배열에 저장합니다.

 

  • Random rd = new Random();: 난수를 생성하기 위해 Random 객체를 생성합니다.
  • int[] lotto = new int[6];: 6개의 숫자를 저장할 배열을 선언합니다.
  • for (int i = 0; i < lotto.length; i++): 배열의 각 요소에 대해 반복합니다.
  • lotto[i] = rd.nextInt(45) + 1;: 1부터 45 사이의 랜덤 숫자를 생성하여 배열에 저장합니다.
  • for (int j = 0; j < i; j++): 현재 숫자가 이전에 생성된 숫자와 중복되는지 확인합니다.
  • if (lotto[i] == lotto[j]) { i--; }: 중복될 경우 현재 인덱스를 감소시켜 다시 숫자를 생성하도록 합니다.

2. 결과 출력

배열에 저장된 숫자를 출력합니다.

 

  • for (int i : lotto): 배열의 각 요소를 순회합니다.
  • System.out.println("행운의 숫자 : " + i);: 각 숫자를 출력합니다.

 

코드 풀이 2: 중복 체크 메소드를 이용한 방식

 

이번에는 중복 체크를 별도의 메소드로 분리하여 코드를 작성해 보겠습니다.

package Ex;

import java.util.Random;

public class Ex18Alternate {
    public static void main(String[] args) {
        Random rd = new Random(); // 랜덤 숫자 생성을 위한 Random 객체 생성
        int[] lotto = new int[6]; // 6개의 숫자를 저장할 배열 선언
        
        for (int i = 0; i < lotto.length; i++) {
            int num = rd.nextInt(45) + 1; // 1부터 45 사이의 랜덤 숫자 생성
            if (!isDuplicate(lotto, num)) { // 중복 검사 메소드 호출
                lotto[i] = num; // 중복되지 않으면 배열에 저장
            } else {
                i--; // 중복되면 현재 인덱스를 감소시켜 다시 숫자 생성
            }
        }
        
        for (int i : lotto) {
            System.out.println("행운의 숫자 : " + i); // 결과 출력
        }
    }
    
    // 배열에 특정 숫자가 있는지 확인하는 메소드
    private static boolean isDuplicate(int[] array, int num) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == num) { // 배열에 특정 숫자가 있는지 확인
                return true; // 숫자가 배열에 있으면 true 반환
            }
        }
        return false; // 숫자가 배열에 없으면 false 반환
    }
}

 

1. 랜덤 숫자 생성 및 저장

중복 체크를 별도의 메소드로 분리하여 중복 없이 랜덤 숫자를 배열에 저장합니다.

 

  • Random rd = new Random();: 난수를 생성하기 위해 Random 객체를 생성합니다.
  • int[] lotto = new int[6];: 6개의 숫자를 저장할 배열을 선언합니다.
  • for (int i = 0; i < lotto.length; i++): 배열의 각 요소에 대해 반복합니다.
  • int num = rd.nextInt(45) + 1;: 1부터 45 사이의 랜덤 숫자를 생성합니다.
  • if (!isDuplicate(lotto, num)): 생성된 숫자가 배열에 중복되지 않는지 확인합니다.
  • lotto[i] = num;: 중복되지 않는 경우 배열에 숫자를 저장합니다.
  • else { i--; }: 중복될 경우 현재 인덱스를 감소시켜 다시 숫자를 생성하도록 합니다.

2. 중복 체크 메소드

 

  • for (int i = 0; i < array.length; i++): 배열의 각 요소를 순회합니다.
  • if (array[i] == num): 배열에 특정 숫자가 있는지 확인합니다.
  • return true;: 숫자가 배열에 있으면 true를 반환합니다.
  • return false;: 숫자가 배열에 없으면 false를 반환합니다.

3. 결과 출력

배열에 저장된 숫자를 출력합니다.

 

  • for (int i : lotto): 배열의 각 요소를 순회합니다.
  • System.out.println("행운의 숫자 : " + i);: 각 숫자를 출력합니다.

마무리

 이번 예제에서는 중복 없이 숫자를 뽑아 로또 프로그램을 만드는 두 가지 방법을 배웠습니다. 이를 통해 난수 생성, 중복 방지, 그리고 배열을 활용하는 방법을 익힐 수 있었습니다. 저장소를 활용하는 것은 좋은 프로그래밍 방법입니다.

 

 프로그래밍을 시작하는 모든 분께 이 예제가 도움이 되길 바랍니다. 앞으로도 다양한 유형의 문제를 통해 여러분의 학습을 도울 수 있도록 노력하겠습니다. 감사합니다!