*LottoBot 클래스
import java.util.LinkedHashSet;
import java.util.Set;
public class LottoBot {
private Set<Integer> lBot;
//기본 생성자
public LottoBot() {}
public Set<Integer> getlBot() {
return lBot;
}
public void setlBot() {
lBot = new LinkedHashSet<Integer>();
int num=0;
//Set은 중복이면 값이 들어가지 않기 때문에 while문으로 Set의 크기가 6개가 될때까지 숫자를 채움.
while(lBot.size()<6){
num = (int)(Math.random()*46);
lBot.add(num);
}
System.out.print(lBot);
}
public void playLotto(Set<Integer> lotto,int count) {
//생성할 수 만큼 로또번호 생성하여 하나씩 비교
for(int i=0; i<count; i++) {
setlBot();
//로또봇에서 생성한 로또번호에 당첨번호를 추가
lBot.addAll(lotto);
//Set은 중복을 허용하지 않기 때문에 1등일 경우 번호가 다 중복되어 크기가 6을 반환
if(lBot.size()==6) {
System.out.println("1등");
}else if(lBot.size()==7) {
System.out.println("2등");
}else if(lBot.size()==8) {
System.out.println("3등");
}else if(lBot.size()==9) {
System.out.println("4등");
}else {
System.out.println("꽝!!");
}
}
// 방법 2. 당첨번호와 로또봇으로 생성한 번호를 새로운 Set구조에 모두 담아 크기를 비교
for(int i=0; i<count; i++) {
bot.makeLottos();
Set<Integer> total = new LinkedHashSet<Integer>();
total.addAll(lotto);
total.addAll(bot.lBot);
if(totall.size()==6) {
System.out.println("1등");
}else if(totall.size()==7) {
System.out.println("2등");
}else if(totall.size()==8) {
System.out.println("3등");
}else if(totall.size()==9) {
System.out.println("4등");
}else {
System.out.println("꽝!!");
}
}
}
*Lotto 클래스
import java.util.LinkedHashSet;
import java.util.Set;
public class Lotto {
private Set<Integer> lotto;
public Lotto() {
setLotto();
}
public Set<Integer> getLotto() {
return lotto;
}
public void setLotto() {
lotto = new LinkedHashSet<Integer>();
//Set은 중복이면 값이 들어가지 않기 때문에 while문으로 Set의 크기가 6개가 될때까지 숫자를 채움.
while(lotto.size()<6){
int num = (int)(Math.random()*46);
lotto.add(num);
}
System.out.println("당첨 번호:" + lotto);
}
}
*Run 클래스
import java.util.Scanner;
public class Run {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("로또를 몇 개 생성하시겠습니까?");
int count = sc.nextInt();
LottoBot bot = new LottoBot();
Lotto lotto = new Lotto();
bot.playLotto(lotto.getLotto(), count);
}
}
-Set 구조가 중복 항목이 존재하지 않는다는 특성을 활용하여 구현해야 하는 문제
-자료구조 자체에 구성이 어떻게 이루어져있는지에 대한 이론적 이해는 있으나 이러한 구조를 실제 코드로 구현해내는 것에 있어서 어려움을 느낌.
-Set 구조는 중복값을 허용하지 않음. 따라서 로또 당첨번호와 내가 생성하는 로또 번호 값을 각각 Set 구조에 추가하고 이 들을 합쳐서 중복이 생기면 값이 들어가지 않는 것을 이용해 Set의 크기를 비교하여 등수를 출력해냄.
-예를 들어 1등의 경우 당첨번호와 생성한 번호가 모두 일치 하기 때문에 6개의 번호가 모두 중복이므로 Set의 크기는 6이 될 것임.
'연습문제 및 실습 자료' 카테고리의 다른 글
자바 맵(MAP) 문제2 - 포켓몬스터(응용) (0) | 2023.08.09 |
---|---|
자바 맵(MAP) 문제 - 포켓몬스터 (0) | 2023.08.08 |
자바 맵(MAP) 문제 - 키오스크 응용(8) (0) | 2023.08.07 |
자바 컬렉션 문제 - 테트리스 게임 (0) | 2023.08.04 |
자바 리스트 문제 - 키오스크 응용(6) (0) | 2023.08.03 |