[백준 2480번] 주사위 세개 - JAVA[자바]
문제
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
- 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
- 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
- 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×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개의 눈이 빈칸을 사이에 두고 각각 주어진다.
출력
첫째 줄에 게임의 상금을 출력 한다.

<어려웠던 점>
-단순히 int형 변수 3개를 만들어 if조건문으로 계산식을 만들려고했으나, 이렇게 하기에는 3번조건이 걸렸다. 즉 3개 변수 중에서 가장 큰 것을 찾는 것이 어려웠다.
<접근 방법>
-> if-else 문을 사용하여 주어진 조건에 따라 점수를 계산하고, 최종 점수를 출력하게 했다.
1. 세 개의 눈금이 모두 같은 경우: 10000에 해당 눈금을 곱한 값이 최종 점수가 되게 하였다.
2. 두 개의 눈금이 같고, 나머지 한 개의 눈금이 다른 경우: 1000에 해당 두 개의 눈금 중 하나를 곱하고, 100을 곱한 값을 최종 점수로 하였다.
3. 세 개의 눈금이 모두 다른 경우: 가장 큰 눈금에 100을 곱한 값을 최종 점수로 하였다.
<제출 코드> - 정답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner dice = new Scanner(System.in);
int A = dice.nextInt();
int B = dice.nextInt();
int C = dice.nextInt();
dice.close();
if (A == B && A == C) {
System.out.println(10000 + (A * 1000));
}
else if (A == B && A != C) {
System.out.println(1000 + (A * 100));
}
else if (A == C && A != B) {
System.out.println(1000 + (A * 100));
}
else if (B == C && A != B) {
System.out.println(1000 + (B * 100));
}
else if (A != B && A != C) {
if(A > B && A > C) {
System.out.println(A * 100);
}
else if(B > A && B > C) {
System.out.println(B * 100);
}
else if(C > A && C > B) {
System.out.println(C * 100);
}
}
}
}
하지만 if-else문의 과다 사용?으로 인해 가독성도 떨어지고, 별로 맘에 들지 않았다.
그래서 다른 분들의 정답과 해설을 찾아보니 Math.max함수를(매드맥스생각나네) 사용하여 간단하게 풀이를 하는 것이었다!
<Math.max함수를 이용한 풀이>
import java.io.*;
import java.util.*;
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 = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
if (a == b && a == c) {
System.out.print(10000+a*1000);
} else if (a == b) {
System.out.print(1000+a*100);
} else if (a == c) {
System.out.print(1000+a*100);
} else if (b == c) {
System.out.print(1000+b*100);
} else {
System.out.print(Math.max(a,Math.max(b,c)) * 100);
}
}
}
<출처 - https://propercoding.tistory.com/66>
1. BufferedReader를 사용하여 입력을 받는다.
2. StringTokenizer를 사용하여 입력을 공백을 기준으로 나누어 토큰화.
3. 각각의 변수 a, b, c에 토큰화된 값을 정수로 변환하여 저장.
4. 주사위의 눈금이 모두 같은 경우를 확인. 모든 눈금이 같으면 10000 + a * 1000의 값을 출력.
5. 두 개의 눈금이 같은 경우를 확인. a와 b가 같으면 1000 + a * 100의 값을 출력.
6. a와 c가 같은 경우를 확인. 1000 + a * 100의 값을 출력.
7. b와 c가 같은 경우를 확인. 1000 + b * 100의 값을 출력.
8. 세 개의 눈금이 모두 다른 경우 가장 큰 눈금을 찾아 Math.max(a, Math.max(b, c))를 사용하여 비교. 가장 큰 눈금에 100을 곱한 값을 출력.
위 코드는 입력된 주사위의 눈금에 실행되는 규칙에 따라서 점수를 계산하고, 최종 점수를 출력한다. 코드는 입력을 받은 후 주어진 조건에 따라 점수를 계산하고, 계산된 점수를 출력하는 역할을 한다.
9. 가장 큰 눈금을 Math.max(a, Math.max(b, c))를 사용하여 찾음.
10. 가장 큰 눈금에 100을 곱한 값을 출력.