Skip to content

Instantly share code, notes, and snippets.

@YongWanJin
Last active July 8, 2023 09:47
Show Gist options
  • Save YongWanJin/585975c4c7c6aecf9ebc18f9134e3482 to your computer and use it in GitHub Desktop.
Save YongWanJin/585975c4c7c6aecf9ebc18f9134e3482 to your computer and use it in GitHub Desktop.
제로베이스 백엔드 1주차 미니과제 7번
/*
진용완
제로베이스 백엔드 스쿨 15기
*/
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.*;
class ExceptionOutOfRange extends RuntimeException{}
class Lotto{
// [ 변수 ]
int amt; // 구매 수량
HashSet<Integer> myLotto; // 구매한 로또 (낱개)
HashSet[] myLottoList; // 구매한 로또 보관함
char[] index = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; // 로또 일련번호
HashSet<Integer> numOfLotto; // 당첨 번호
Scanner sc;
Random rd;
Lotto(){}
// [ public 메서드 ]
// # 로또 구입(자동 추첨) 메서드
public void buyLotto(){
System.out.println("[로또 당첨 프로그램]\n");
// 구매 수량 입력값 받기
while (true) {
try{
System.out.print("로또 개수를 입력해 주세요.(숫자 1 ~ 10):");
sc = new Scanner(System.in);
amt = sc.nextInt();
if (amt<1 | amt>10) {
throw new ExceptionOutOfRange();
}
} catch (InputMismatchException | ExceptionOutOfRange e) {
continue;
} break;
}
// 구매한 수량만큼 로또 생성
rd = new Random();
myLottoList = new HashSet[amt];
for (int i = 0; i<amt; i++) {
// 자동 추첨
myLotto = chooseNum();
// 추첨 결과 출력
String f = formatNum(myLotto);
System.out.printf("%s %s\n", index[i], f);
// 구매한 로또 저장
myLottoList[i] = myLotto;
}
System.out.println();
}
// # 당첨 여부 확인 메서드
public void showResult(){
// 당첨 번호 추첨
numOfLotto = chooseNum();
// 추첨 결과 출력
System.out.println("[로또 발표]");
String f = formatNum(numOfLotto);
System.out.println(" " + f + "\n");
// 당첨 여부 출력
System.out.println("[내 로또 결과]");
for (int i=0; i<amt; i++){
HashSet<Integer> result = new HashSet<>(myLottoList[i]);
result.retainAll(numOfLotto);
String f2 = formatNum(myLottoList[i]);
System.out.printf("%s %s => %d개 일치\n", index[i], f2, result.size());
}
}
// [ private 메서드 ]
// # 로또 번호 6개를 추첨하는 메서드
private HashSet<Integer> chooseNum(){
HashSet<Integer> lotto = new HashSet<Integer>();
while(lotto.size()<6){
lotto.add(rd.nextInt(45)+1);
}
return lotto;
}
// # 깔끔한 출력을 위해 로또 번호를 포메팅해주는 메서드
private String formatNum(HashSet<Integer> lotto){
// 오름차순 정렬
ArrayList<Integer> lottoList = new ArrayList<>(lotto);
Collections.sort(lottoList);
// 간격 맞추기
String f = "";
for(int j = 0; j<6; j++) {
int n = lottoList.get(j);
if (n<10){
f = f + "0" + n + ", ";
} else {
f = f + n + ", ";
}
}
f = f.substring(0, f.length()-2);
return f;
}
}
// 메인부
public class Mini7Lotto {
public static void main(String[] args) {
Lotto lotto = new Lotto();
lotto.buyLotto();
lotto.showResult();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment