오늘의 문제는 학창시절 누구나 한 번쯤 해봤을 게임으로 야구게임입니다.
음,,, 혹시라도 룰을 모르는 사람들을 위해 좀 끄적여 보겠습니다.
규칙
- 1 ~ 9 까지 랜덤한 수를 3번 뽑을 수 있다.
- 뽑은 3자리 숫자를 상대방의 숫자와 비교를 한다.
- 상대방의 숫자와 자리, 값 모두 일치한다면 스트라이크!!
- 값은 일치하지만 자리가 틀리다면 볼!
- 하나도 일치하지 않는다면 아웃!!!
- 중복값은 허용되지 않습니다.
예)
상대방의 숫자 : 1, 2, 3
내가뽑은 숫자 : 1, 3, 6
내가 뽑은 수 1은 상대방과 자리,값이 같기 때문에 1 스트라이크
숫자 3은 상대방과 자리가 다르기 때문에 1 볼
6은 자리, 값 모두 다름으로 1 아웃
최종적으로 나의 성적은 1strike, 1ball, 1out 이 된다.
꿀팁!
우리는 컬렉션 프레임워크 파트에서 중복을 배제해주는 무엇인가를 배웠습니다!
정답
Scanner sc = new Scanner(System.in);
HashSet<Integer> baseball = new HashSet<>();
while(baseball.size() < 3){
baseball.add((int)(Math.random() * 9) + 1);
}
List<Integer> basenum = new ArrayList<>(baseball);
System.out.println(basenum);
boolean flag = true;
while(flag){
int count = 0;
int str = 0;
int ball = 0;
HashSet<Integer> hashnum = new HashSet<>();
System.out.println("숫자를 입력해주세요. 1 ~ 9");
while(hashnum.size() < 3){
boolean vr = hashnum.add(sc.nextInt());
if(vr == false){
System.out.println("다시 입력해주세요. 중복 값입니다.");
}
}
List<Integer> num = new ArrayList<>(hashnum);
for (int i = 0; i < num.size(); i++) {
for (int j = 0; j < num.size(); j++) {
if(num.get(i) == basenum.get(j)){
ball++;
if(num.get(i) == basenum.get(i)){
str++;
ball--;
}
}
}
}
count++;
System.out.println("당신이 입력한 숫자 : " + num);
System.out.println(count + "회 : " + str + "Strike, " + ball + "Ball, " + (3 - str - ball)+ " out");
if(str == 3){
System.out.println("정답을 맞췄습니다 축하드립니다.\n" + count + "회에 정답을 맞췄습니다.");
flag = false;
}
}