## 과제 : 숫자 야구 게임 목표 : 숫자 야구 게임을 구현현해본다. 요구사항 : 다음 조건을 만족하는 숫자 야구 게임을 구현한다. 1. **난수 생성**: 프로그램은 1부터 9까지의 서로 다른 숫자 3개를 임의로 생성한다. 이 숫자들은 게임 동안 변경되지 않으며, 플레이어가 맞춰야 할 대상이다. 2. **사용자 입력**: 플레이어는 1부터 9까지의 서로 다른 숫자 3개를 입력한다. 3. **판정 로직**: 컴퓨터는 플레이어가 입력한 숫자들과 초기에 생성한 난수를 비교하여 결과를 판정한다. 이때, 다음과 같은 용어를 사용한다 - **스트라이크**: 플레이어가 선택한 숫자가 위치와 숫자 모두 맞을 경우. - **볼**: 숫자는 맞지만 위치가 틀릴 경우. - **아웃**: 맞는 숫자가 하나도 없을 경우. 4. **결과 표시**: 게임은 플레이어의 입력마다 스트라이크, 볼, 아웃의 개수를 표시한다. 예를 들어, "2스트라이크 1볼" 또는 "3아웃"과 같이 표시한다. 5. **게임 종료 조건**: 플레이어가 3스트라이크를 달성하면 게임은 종료된다. 게임이 종료되면, 플레이어에게 승리 메시지와 함께 몇 번의 시도 끝에 성공했는지 알려준다. --- ## 과제 : 숫자 야구 게임 모범 답안 ```java import java.util.*; public class NumberBaseballGame { public static void main(String[] args) { // 난수 생성 int[] targetNumbers = generateRandomNumbers(); // 게임 루프 int attempts = 0; while (true) { // 사용자 입력 받기 System.out.println("남은 시도: " + (10 - attempts) + "번"); int[] userNumbers = getUserInput(); // 결과 체크 int strikes = countStrikes(targetNumbers, userNumbers); int balls = countBalls(targetNumbers, userNumbers); int outs = 3 - strikes - balls; // 결과 표시 System.out.println(strikes + " 스트라이크, " + balls + " 볼, " + outs + " 아웃"); // 게임 종료 조건 검사 if (strikes == 3) { System.out.println("축하합니다! " + attempts + "번의 시도 끝에 승리했습니다."); break; } attempts++; } } private static int[] generateRandomNumbers() { int[] numbers = new int[3]; Random random = new Random(); for (int i = 0; i < 3; i++) { while (true) { int randomNumber = random.nextInt(9) + 1; // 1부터 9까지의 난수 생성 boolean isUnique = true; for (int j = 0; j < i; j++) { // 중복 검사 if (numbers[j] == randomNumber) { isUnique = false; break; } } if (isUnique) { numbers[i] = randomNumber; break; } } } return numbers; } private static int[] getUserInput() { Scanner scanner = new Scanner(System.in); int[] numbers = new int[3]; System.out.print("1부터 9까지의 서로 다른 숫자 3개를 입력하세요: "); for (int i = 0; i < 3; i++) { while (true) { int number; try { number = scanner.nextInt(); } catch (Exception e) { System.out.println("잘못된 입력입니다. 숫자를 다시 입력해 주세요."); scanner.next(); // 잘못된 입력 스트림 비우기 continue; // 다시 입력 받음 } // 유효하지 않은 입력 처리 if (number < 1 || number > 9) { System.out.println("잘못된 숫자입니다. 1부터 9까지의 숫자를 입력해 주세요."); continue; // 다시 입력 받음 } // 중복 숫자 입력 처리 boolean isUnique = true; for (int j = 0; j < i; j++) { if (numbers[j] == number) { System.out.println("중복된 숫자입니다. 다른 숫자를 입력해 주세요."); isUnique = false; break; // 중복 발견 시 다시 입력 } } if (isUnique) { numbers[i] = number; break; // 유효한 숫자면 반복 중단 } } } return numbers; } private static int countStrikes(int[] targetNumbers, int[] userNumbers) { int strikes = 0; for (int i = 0; i < 3; i++) { if (targetNumbers[i] == userNumbers[i]) { strikes++; } } return strikes; } private static int countBalls(int[] targetNumbers, int[] userNumbers) { int balls = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (i != j && targetNumbers[i] == userNumbers[j]) { balls++; } } } return balls; } } ```