문제 풀이

[백준] 2480번: 주사위 세개 - JAVA (자바)

auyeol 2023. 1. 19. 15:18
728x90

 

 

문제

https://www.acmicpc.net/problem/2480

 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.  같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.  같은 눈이 2개

www.acmicpc.net

 

3개의 주사위를 던져서 3개의 규칙에 따라 상금을 받게하는 코드를 작성하는 문제이다.

 

 

풀이

 

(1) 맨 처음 주사위가 모두 다 같은 경우를 AND (&&)를 이용해서 if문을 만들었다.

          if(dice1 == dice2 && dice2 == dice3)      > 주사위가 모두 같은 경우 10000 + 같은 눈 * 1000

 

(2) 주사위가 2개인 경우(3가지)를 else if 로 만들었다.

          else if(dice1 == dice2), else if(dice2 == dice3), else if(dice1 == dice3)   > 주사위가 2개가 같은 경우 1000 + 같은 눈 * 100

 

(3) 맨 처음 if문을 모두 다 같은 경우로 했기 때문에 else를 쓰면 주사위가 모두 다를 경우가 될 것이다.

   > 주사위가 다 다를 경우 > 그 중에서 가장 큰 눈 * 100 을 해야하기 때문에 가장 큰 수를 비교하는 if문을 안에 또 작성하였다.

      (a) 맨 처음 if 문은 주사위 1이 가장 큰 경우를 하였다. 

               if(dice1 >= dice2 && dice1 >= dice3)

                      prize = 100 * dice1

     

      (b) dice2가 가장 큰 경우를 else if로 만들었다.

               else if(dice2 >= dice1 && dice2 >= dice3)

                      prize = 100 * dice2

     

      (c) 1,2 가 큰 경우를 설정했기 때문에 else를 하면 3이 가장 큰 경우가 될 것이다.

               else

                     prize = 100 * dice 3; 

          

 

import java.util.*;

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

		int dice1 = sc.nextInt();
		int dice2 = sc.nextInt(); 
		int dice3 = sc.nextInt();
		int prize = 0;
		
		if(dice1 == dice2 && dice2 == dice3) prize = 10000 + dice1 * 1000;
		
		else if(dice1 == dice2) prize = 1000 + dice1 * 100;
		
		else if(dice2 == dice3) prize = 1000 + dice2 * 100;
			
		else if(dice1 == dice3) prize = 1000 + dice1 * 100;
			
		else {
			if(dice1 >= dice2 && dice1 >= dice3) prize = 100 * dice1;
			else if(dice2 >= dice1 && dice2 >= dice3) prize = 100 * dice2;
			else prize = 100 * dice3;
		}
	
		System.out.println(prize);
		
		sc.close();
	}
}

 

 

else if 문에서 else if(dice1 == dice2) 와 else if(dice1 == dice3) 는 prize가 같게 계산을 하기 때문에 

 

코드 길이를 더 줄인다면 OR(||) 를 사용해서 더 줄일 수 있을 것 같았다.

 

+

코드를 너무 난잡하게 짠 것 같아서 다른 사람들은 어떻게 했는 지 봤는데 가장 큰 수를 구할 때 Math.max 함수를 이용해서 구하는 것을 봤다.

 

import java.util.*;

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

		int dice1 = sc.nextInt();
		int dice2 = sc.nextInt(); 
		int dice3 = sc.nextInt();
		int prize = 0;
		
		if(dice1 == dice2 && dice2 == dice3) prize = 10000 + dice1 * 1000;
		
		else if(dice1 == dice2 || dice1 == dice3) prize = 1000 + dice1 * 100;
		
		else if(dice2 == dice3) prize = 1000 + dice2 * 100;
			
			
		else {
			prize = Math.max(Math.max(dice1, dice2),dice3) * 100;
			
		}
	
		System.out.println(prize);
		
		sc.close();
	}
}

 

처음에 짠 코드보다 훨씬 깔끔하게 정리가 된 것 같다. 

728x90