본문 바로가기

BackEnd/Java

[JAVA] 조건문, 반복문을 이용한 문제 풀이 9(숫자 맞추기 게임)

728x90
반응형

 

목차

                                                                                                                           

1. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 1(윤년 계산기)

2. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 2(주사위 게임)

3. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 3(배수 판별기)

4. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 4(청구 금액 계산기)

5. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 5(다독왕)

6. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 6(피보나치 수)

7. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 7(출입증)

8. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 8(방정식)

9. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 9(숫자 맞추기 게임)

10. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 10(만원의 행복)

11. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 11(은행)

                                                                                                                           

 

 

자바의 조건문, 반복문을 이용한 문제 풀이를 진행해보겠습니다~

 

 

문제 9) 숫자 맞추기 게임
숫자 맞추기 게임을 하는 프로그램을 작성하라.

프로그램은 1과 100을 포함한 사이의 임의의 정수를 선택해야 한다.
그 다음에 사용자에게 1에서 100사이의 숫자를 입력 받는다.
사용자가 추측한 숫자가 맞거나, 큰지, 작은지 알려주고 사용자가 정확하게 맞추거나 맞추기를 그만 둘 때까지 수자 맞추기를 계속하라. 맞출 때까지 추측한 횟수를 세고 사용자가 맞추고 난 후 그 횟수를 출력하라.

각 게임이 끝난후에 사용자가 맞추기 게임을 계속하기를 원하는지 묻고,
사용자가 게임을 종료하기를 원할 때 까지 게임을 계속하게 하라.

단, 각 게임 마다 추측 횟수는 초기화되어 새로 세어야 한다.

 

 

👉 출력방법

1. 숫자를 입력하십시오 → [숫자입력]
2. 정답은 해당 숫자보다 큽니다
3. 숫자를 입력하십시오 → [숫자입력]
4. 정답은 해당 숫자보다 작습니다
5. 반복 정답입니다!
6. 추측 횟수는 [숫자]번 입니다.
7. 계속 하시겠습니까?(y/n) → [y 또는 n 입력]
8. (y를 선택할 경우 다시 첫 줄로 돌아가 반복 . . .)
9. n 선택시 프로그램을 종료합니다. . .

 

 

👉  문제 풀이를 위한 Flow Chart

 


👉  문제 해답 코드

import java.util.Scanner;

public class NmuberGame {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
				
		int random = 0;
		int count = 0;
		int input = 0;
		boolean tf = true;
		String yn = "";
		
		do {
			if(tf) {				
				random = (int)(Math.random()*100)+1;
				count = 1;
				tf = false;
			}
			System.out.print("숫자를 입력하십시오 : ");
			input = sc.nextInt();
			
			if(input == random) {
				System.out.println("정답입니다!");
				System.out.println("추측 횟수는 " + count + "번 입니다.");
				tf = true;
			} else {
				if(input > random) {
					System.out.println("정답은 해당 숫자보다 큽니다.");
				} else {
					System.out.println("정답은 해당 숫자보다 작습니다.");				
				}	
				count++;
			}
			
			if(tf) {
				do {
					System.out.print("계속 하시겠습니까?(y/n)");
					yn = sc.next();
				}while(!yn.equals("n") && !yn.equals("y"));
			}
		} while(!yn.equals("n"));
		
		System.out.println("프로그램을 종료합니다.");
		
		sc.close();
	}
}

 

 

👉  코드 해설

1. 입력을 위한 java.util의 Scanner 클래스를 가져온다.
2. 입력을 받기위한 변수, 값 지정을 위한 변수, 정답 여부 등을 확인하기 위한 변수 총 5개를 지정한다.
3. 조건문을 통해 정답 여부를 확인한다.
 3-1) 참이라면, 랜덤 값(1~100)을 다시 입력 받고, count를 1, tf에 false 값을 넣는다.
4. 숫자를 입력받는다.
5. 입력 값과 랜덤 값이 같은지 확인한다.
 5-1) 참이라면, 정답 문구 및 추측횟수를 출력한다.
 5-2) 거짓이라면, input이 random보다 큰지 확인한다.
  5-2-1) 정답이 숫자보다 크다는 문구 출력
  5-2-2) 거짓이라면, 정답이 숫자보다 작다는 문구 출력
6. 조건문을 통해 정답 여부를 확인한다.
 6-1) 정답이기 때문에 계속 진행할지 여부를 확인을 위한 문자를 입력받는다.
 6-2) y, n 이라는 문자를 입력하지 않으면 6-1을 다시 진행한다.
7. n이라는 문자를 사용할 때까지 게임을 반복한다.

 

 

문제 풀이 시 do-while문을 이용해 일단 한 번 실행이 된 후 조건을 만족하면 계속 반복문이 실행되도록 문제 풀이를 진행했습니다. 최종 정답을 맞춰도 계속 진행 여부를 확인할 수 있도록 만들었습니다.

 

if(tf)를 동일한 while문 내에 2개나 사용하였습니다. 이 것을 하나로 줄일 수 있는 방법을 찾을 수 있도록 노력해야겠어요!

 

혹시나 코드를 보고 좀 더 간단하게 풀이하실 수 있는 분들은 답글 부탁드려요!!!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형