안녕하세요, 작가 J입니다. 이번에는 중복 없이 숫자를 뽑아 로또 프로그램을 만드는 방법에 대해 알아보겠습니다. 이 예제는 난수 생성과 중복 방지, 그리고 반복문을 활용하는 데 도움이 될 것입니다.
[Java Festival 18] 중복 없이 숫자를 뽑는 로또 프로그램
중복이 없이 숫자를 뽑는 로또 프로그램을 만드시오
문제 분석
이 문제는 다음과 같은 단계를 통해 해결할 수 있습니다:
- 1부터 45 사이의 숫자 중 6개의 숫자를 랜덤으로 뽑습니다.
- 중복되지 않도록 숫자를 저장합니다.
- 뽑은 숫자를 출력합니다.
코드 풀이
코드 풀이 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);: 각 숫자를 출력합니다.
마무리
이번 예제에서는 중복 없이 숫자를 뽑아 로또 프로그램을 만드는 두 가지 방법을 배웠습니다. 이를 통해 난수 생성, 중복 방지, 그리고 배열을 활용하는 방법을 익힐 수 있었습니다. 저장소를 활용하는 것은 좋은 프로그래밍 방법입니다.
프로그래밍을 시작하는 모든 분께 이 예제가 도움이 되길 바랍니다. 앞으로도 다양한 유형의 문제를 통해 여러분의 학습을 도울 수 있도록 노력하겠습니다. 감사합니다!
'프로그래밍 기초 > Java Festival' 카테고리의 다른 글
[Java Festival] 19. 단 수와 곱해질 수를 입력받아 구구단 출력하기 (0) | 2024.06.30 |
---|---|
[Java Festival] Bonus 04. 배열의 인덱스 수만큼 별 출력하기 (0) | 2024.06.30 |
[Java Festival] 17. 3의 배수인 숫자 출력하기 (0) | 2024.06.30 |
[Java Festival] Bonus 03. 연산 메소드 작성하기 (0) | 2024.06.30 |
[Java Festival] 16. 8자리 정수의 합 구하기 (0) | 2024.06.29 |