[Algolithm] 백준 주사위 3개 2480

안요한·2022년 7월 4일
0

연습문제

목록 보기
6/8

문제

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

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

예를 들어, 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원을 상금으로 받게 된다.

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

입력

첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

출력

첫째 줄에 게임의 상금을 출력 한다.

내 풀이

  • 매우 노가다성이 짙은 풀이다.
  • 경우의 수를 하나하나 다 직접 적어 가면서 풀었다.
  • 제일 큰 값을 찾는 것도, max변수를 따로 만들어 가장 큰 값을 max에 저장하여 해결했다.
import java.util.Scanner;

public class Square2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		 int num1 = sc.nextInt(); 
		 int num2 = sc.nextInt(); 
		 int num3 = sc.nextInt();
		 int max = 0;
		  
		 if(num1 == num2 && num1 == num3) { //세 수 다 같은 경우
			 System.out.println(10000 +(num1 * 1000));
		 } else if(num1 == num2 && num1 != num3) { // 두 수 같은 경우1
			 System.out.println(1000+(num1*100));
		 } else if(num1 == num3 && num2 != num3) { // 두 수 같은 경우2
			 System.out.println(1000+(num1*100));
		 } else if(num2 == num3 && num1 != num3) { // 두 수 같은 경우3
			 System.out.println(1000+(num1*100));
		 } else if(num1 != num2 && num1 != num3 && num2 != num3) { // 세 수가 모두 다른 경우
			 // 제일 큰 값을 찾아준다.
			 if(num1 > num2 && num1 >num3) {
				 max = num1;
			 } else if(num2 > num1 && num2 > num3) {
				 max = num2;
			 } else if(num3 >num1 && num3 > num2) {
				 max = num3;
			 }
			 System.out.println( max * 100);
		 }
		 

	}
}

더 쉬운 풀이

  • 내 풀이에서 두 수가 같은 경우를 간략하게 했다.
  • 첫 번째로 and연산자가 아닌 or 연산자를 사용해 먼저 두 수를 비교하고
  • 나머지 두 수를 비교해서 코드 한 줄을 줄였다.
  • 마지막으로 세 수가 모두 다른 경우에는
  • 내 풀이에서는 max 변수를 만들어 저장하는 방식을 사용했지만, 이 풀이에서는 Math.max 내장함수를 이용하여
  • 두 수를 비교하여 큰 값이랑 나머지 큰 값이랑 비교하여 가장 큰 수를 찾았다.
import java.util.Scanner;

public class Square {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		 int num1 = sc.nextInt(); 
		 int num2 = sc.nextInt(); 
		 int num3 = sc.nextInt();
		 
		 if(num1 == num2 && num1 == num3) { // 세 수가 모두 같으면
			 System.out.println(10000 +(num1 * 1000));
		 } else if(num1 == num2 || num1 == num3) { // or 연산자를 통해 두 수 같은 경우1
			 System.out.println(1000+(num1*100));
		 } else if(num2 == num3) {				   // 나머지 두 수 같은 경우 2
			 System.out.println(1000+(num2*100));
		 } else { //앞서서 같은 경우는 모두 따졌기 때문에, 나머지는 세 수가 틀린경우만 남는다.
			 	  //max함수를 사용해 두 수를 먼저 비교 후 , 큰 값이랑 나머지 값이랑 비교 후 큰 값 구함.
			 System.out.println(Math.max(num1, Math.max(num2, num3)) * 100);
		 }
		

	}
}
profile
걍이렇게돼브렀다리

0개의 댓글