[JAVA] 백준 2480. 주사위 세개

이 글은 읽는데 약 5분이 걸립니다.

※개인 공부 목적의 정리글입니다.
이 글의 내용이 최선의 해답은 아닐 수 있습니다.

문제

403 Forbidden

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개의 눈이 빈칸을 사이에 두고 각각 주어진다. 

출력

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

요약

조건문으로 몇 개의 주사위 눈이 일치하는지를 파악하는 것이 중요

나의 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        StringTokenizer st = new StringTokenizer(input);
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int C = Integer.parseInt(st.nextToken());

        // A
        int money = 0;

        // B
        if(A == B && B == C){
            money = 10000 + (A * 1000);
        }else if(A == B && B != C){
            money = 1000 + (A * 100);
        }else if(B == C && C != A){
            money = 1000 + (B * 100);
        }else if(C == A && A != B){
            money = 1000 + (C * 100);
        }else{
            money = Math.max(A, Math.max(B, C)) * 100;
        }

        System.out.println(money);
        br.close();
    }

}

A

지급될 돈의 기본값은 0으로 초기화 했다.

B

단순히 비교했다.
Java는 A == B == C 같은 문법이 안되므로 이런식으로 두 개씩 따로 체크했다.

세 개가 같은지 확인하기 위해 A와 B가 같고, B와 C가 같은가?
두 개가 같은지 확인하기 위해 두 눈은 같고 다른 하나가 같은 두 눈 중 하나와 다른가?
한 개가 같은지 확인하기 위해 위의 모든 케이스에 해당하지 않는가?

나의 코드 – 개선점

두 개의 눈이 같은지 확인하는 부분을 개선할 수 있었다.

if(A == B && B == C){
   // 모두 같음
}else if(A == B || A == C){
   // 두 개만 같음
}else if(B == C){
   // 두 개만 같음
}else{
   // 모두 다름
}

먼저 모두 같은 경우는 똑같이 비교한다.

두 개만 같은 경우는 먼저 세 눈 중 하나(여기서는 A)를 기준으로 해서 그것이 다른 두 눈 중 하나와 같은지 확인한다.
조건부만 놓고 보면 모두 같은 경우에도 참이겠지만 그 경우는 이미 위의 if 부분에서 걸러지므로 생각할 필요 없다.
그리고 비교하지 않은 다른 두 눈들끼리 같은지 확인한다

그 외의 경우는 당연히 모두 다른 경우가 되겠다.

댓글