study/algorithm

[알고리즘] 주사위 세개 - 백준 2480번

박허디 2024. 6. 17. 15:16

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

 

문제를 풀 때 중요한 건 세 개의 변수 비교를 잘 생각해야 된다.

 

먼저 3개의 변수가 모두 다른 경우부터 생각해 보자

//주사위 숫자가 모두 다른 경우
if(a!=b && b!=c && a!==c){

}

//한 쌍이라도 서로 같은 숫자가 있는 경우
else{

}

그리고 문제에서

모두 다른 눈이 나오는 경우에는 (그중 가장 큰 눈) X100원의 상금을 받게 된다고 쓰여있기 때문에

3개의 다른 숫자 중에서 가장 큰 숫자를 찾아야 된다.

 

a와 b에서 큰 숫자를 확인한 후 큰 숫자를 c랑 비교하면 된다.

 

 

//주사위 숫자가 모두 다른 경우
if(a!=b && b!=c && a!==c){
	int max;
// a > b 인 경우
	if(a > b){
    //c > a > b 이면
    if(c > a){
    max = c;
  }
  // a > (b, c) 이면
  else {
  	max = a;
  }
}

  // b > a 인 경우
else {
	// c > b > a 이면
    if(c > b){
    max = c;
  }
  // b > (a,c) 이면
  else{
    max = b;
   }
  }
  System.out.println(max * 100)
 }

 

위 처럼 해주면 3가지의 숫자가 모두 다를 때 경우의 수를 모두 완성한다.

 

두 번째로

적어도 같은 변수가 한 묶음 이상 존재할 때도 고려해야 한다

방법으로는 

a와 b,. c 모두가 같은지 비교해보고 모두 같으면 문제에 제시된 조건처럼 10000+주사위 눈 X1000을 하면 되고

아닐 경우엔 한 묶음이 같다는 것이니 같은 수를 찾으면 된다.

 

한 묶음만 같은 경우인 조건은 

a를 기준으로 b와 같거나 c와 같은 경우를 판다 하면 된다

a==b || a==c 이런 식으로 할 수 있다.

 

이와 반대로 조건이 모두 안 맞으면 유일하게 b==c인 게 된다.

 

//주사위 숫자가 모두 다른 경우
if(a!=b && b!=c && a!==c){
  //중략
}
//적어도 한 쌍 이상의 서로 같은 숫자가 존재할 경우
else{
	//3개의 숫자가 모두 같은 경우
    if(a==b && a==c){
    
    }else{
    //a가 b또는 c랑 같은 경우
    if(a==b || a==c){
    
    }
    //b가 c랑 같은 경우
    else{
    
    }
   }
  }

 

문제에 맞춰서 코드를 짜면 아래와 같다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 
		int a, b, c;
		a = Integer.parseInt(st.nextToken());
		b = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
 
		// 만약 모든 변수가 다른 경우
		if (a != b && b != c && a != c) {
			int max;
			// 만약 a > b 라면
			if (a > b) {
				// c > a > b 라면
				if (c > a) {
					max = c;
				} 
				// a > (b, c)
				else {
					max = a;
				}
			}
			// b > a 라면	
			else {
				// c > b > a 라면
				if (c > b) {
					max = c;
				}
				// b > (a, c)
				else {
					max = b;
				}
			}
			System.out.println(max * 100);
		}
		// 적어도 한 쌍 이상의 서로 같은 변수가 존재할 경우
		else {
			// 3개의 변수가 모두 같은 경우
			if (a == b && a == c) {
				System.out.println(10000 + a * 1000);
			}
			else {
				// a가 b혹은 c랑만 같은 경우
				if(a == b || a == c) {
					System.out.println(1000 + a * 100);
				}
				// b가 c랑 같은 경우
				else {
					System.out.println(1000 + b * 100);
				}
			}
		}
	}
}