반응형
문제
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개의 눈이 빈칸을 사이에 두고 각각 주어진다.
출력
첫째 줄에 게임의 상금을 출력 한다.
예제
예제입력 | 예제출력 |
3 3 6 | 1300 |
2 2 2 | 12000 |
6 2 5 | 600 |
풀이 및 코드
-> 나는 if문으로 모든 경우를 다 따져서 풀었다.(3개가 같은 경우, 2개만 같은 경우, 모두 다른 경우) 그 코드는 아래와 같다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
if(a==b&&b==c){
System.out.println(10000+a*1000);
} else if((a==b&&b!=c)||(b==c&&c!=a)||(c==a&&a!=b)){
if(a==b){
System.out.println(1000+a*100);
} else if(b==c){
System.out.println(1000+b*100);
} else if(c==a){
System.out.println(1000+c*100);
}
} else if(a!=b&&b!=c) {
if(a>b&&a>c){
System.out.println(100*a);
} else if(b>a&&b>c){
System.out.println(100*b);
} else if(c>a&&c>b){
System.out.println(100*c);
}
}
}
}
하지만 이는 너무 비효율적이어 보인다. 그래서 어떻게 하면 효율적으로 풀 수 있을지 찾아보았다.
Array 함수를 통해서 주사위 값을 미리 정렬한 후에 비교를 하면 크기에 따른 순서가 정해지기 때문에 훨씬 간단하게 코드를 작성할 수 있었다. 그 코드는 아래와 같다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] dice = new int[3];
for (int i = 0; i < 3; i++) {
dice[i] = in.nextInt();
}
Arrays.sort(dice); // 정렬하여 최대 값을 찾기 쉽게 함
if (dice[0] == dice[2]) { // 모든 주사위 눈이 같은 경우
System.out.println(10000 + dice[0] * 1000);
} else if (dice[0] == dice[1] || dice[1] == dice[2]) { // 두 개의 주사위 눈이 같은 경우
System.out.println(1000 + dice[1] * 100);
} else { // 모든 주사위 눈이 다른 경우
System.out.println(dice[2] * 100); // 정렬된 배열의 마지막 요소가 최대 값
}
}
}
반응형
'Algorithm > 백준 단계별로 풀어보기' 카테고리의 다른 글
[백준 단계별로 풀어보기-심화] 그룹 단어 체커 (JAVA) (2) | 2024.03.19 |
---|---|
[백준 단계별로 풀어보기-문자열] 문자열 (JAVA) (0) | 2024.03.15 |
[백준 단계별로 풀어보기-문자열] 문자와 문자열 (JAVA) (0) | 2024.03.14 |
[백준 단계별로 풀어보기-1차원 배열] 과제 안 내신 분..? (JAVA) (0) | 2024.03.13 |
[백준 단계별로 풀어보기-반복문] 영수증 (JAVA) (0) | 2024.03.08 |