본문 바로가기

BackEnd/Java

[JAVA] 조건문, 반복문을 이용한 문제 풀이 2(주사위 게임)

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(은행)

                                                                                                                           

 

 

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

 

 

문제 2) 주사위 게임
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

1. 같은 눈이 3개가 나오면, 10,000원 + (같은 눈) × 1,000원의 상금을 받게 된다.
2. 같은 눈이 2개만 나오는 경우에는 1,000원 + (같은 눈) × 100원의 상금을 받게 된다.
3. 모두 다른 눈이 나오는 경우에는 (가장 큰 눈) × 100원의 상금을 받게 된다.

주사위를 3번 굴려 나온 값을 각각 차례대로 출력하고, 마지막 주사위 값이 출력되면 즉시 상금을 계산하는 프로그램을 작성 하시오.

예시) 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다.
또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다.
3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

참고) 1~6 사이의 랜덤 값 얻기 : (int)(Math.random() * 6 +1)

 

 

👉 출력방법

1. 첫 번째 주사위를 굴리시겠습니까? → [enter]
2. 첫 번째 주사위 값 : [숫자]
3. 두 번째 주사위를 굴리시겠습니까? → [enter]
4. 두 번째 주사위 값 : [숫자]
5. 세 번째 주사위를 굴리시겠습니까? → [enter]
6. 세 번째 주사위 값 : [숫자]
7. 총 상금은 [액수]입니다.

 

 

👉  문제 풀이를 위한 Flow Chart

 


👉  문제 해답 코드

import java.util.Scanner;

public class DiceGame {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫 번째 주사위를 굴리시겠습니까? ");
		sc.nextLine();
		int num1 = (int)(Math.random()*6)+1; 
		
		System.out.print("두 번째 주사위를 굴리시겠습니까? ");
		sc.nextLine();
		int num2 = (int)(Math.random()*6)+1; 
		
		System.out.print("세 번째 주사위를 굴리시겠습니까? ");
		sc.nextLine();
		int num3 = (int)(Math.random()*6)+1; 
		
		int sum;
		
		if(num1 == num2 || num1 == num3 || num2 == num3) {
			if(num1 == num2 && num1 == num3) {
				sum = num1 * 1000 + 10000;
			} else {
				if(num1 == num2) {
					sum = num1 * 100 + 1000;
				} else {
					sum = num3 * 100 + 1000;
				}
			}
		} else {
			int max = Math.max(num1, num2);
			max = Math.max(max, num3);
			sum = max * 100;
		}
		
		System.out.println("총 상금은 " + sum + "원 입니다.");
		sc.close();
	}
}

 

 

 

👉  코드 해설

1. 입력을 위한 java.util의 Scanner 클래스를 가져온다.
2. 인스턴스 생성 후 공백을 입력받고 랜덤으로 주사위를 굴려 각각 변수(3개)에 저장한다.
3.  sum 변수를 선언해 최종 획득 상금을 저장한다.
4. 만약 세 개 중 2개가 일치한다면?
 4-1) 참이라면, 세 값이 모두 일치하는지 확인한다.
  4-1-1) 참이라면, 최종 상금은 (주사위 값) x 1,000 + 10,000원
  4-1-2) 거짓이라면, 1번, 2번 주사위가 같은지 확인한다.
   4-1-1-1) 참이라면, 최종 상금은 (1번 주사위 값) x 100 + 1,000원
   4-1-1-2) 거짓이라면, 최종 상금은 (3번 주사위 값) x 100 + 1,000원
 4-2) 거짓이라면, Math.max 함수를 이용해 가장 큰 값을 찾는다. 최종 상금은 (큰 주사위 값) x 100원
5. 총 상금을 출력합니다.

 

 

문제 풀이 시, 배열을 배우지 않았다는 가정하에 문제를 풀이했기 때문에 변수 선언과 입력을 3번씩 진행했고, 중복되는 코드가 많이 나온 것을 볼 수 있습니다. Math.ramdom()을 통해 임의의 주사위 값이 나오도록 선언했습니다.

중첩 if문을 사용하여 많은 조건을 주었습니다. 하지만, if문의 조건문에 조건이 너무 많이 있어 조금 아쉽긴합니다!

 

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

 

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

 

728x90
반응형