[★2][백준2480번]주사위 세개 (JAVA)
카테고리: BKJN
태그: Algorithm Java Coding Test
[★2][백준2480번]주사위 세개 (JAVA)
2480번 문제 ☞ https://www.acmicpc.net/problem/2480
난이도 ☞ [★2]
주사위 세개
- 문제
- 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
- 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
내가 푼 풀이
이번 문제는 if-else
를 적절히 사용하여 구현하는 것입니다.
각각 Scanner
와 BufferedReader
로 풀이하여 작성을 해보았습니다. 그리고 Math.max()
를 이용하여 인자 값 중 큰 수를 리턴하는 방법을 사용하였습니다. 먼저 Scanner
+Math.max()
입니다.
[ 풀이 1 ]
메모리 :
17656KB
시간 :216ms
Scanner, Math.max()
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();
if (a == b && a == c && b == c) {
System.out.println(10000 + (a * 1000));
} else if (a == b || a == c) {
System.out.println(1000 + (a * 100));
} else if (b == c) {
System.out.println(1000 + (b * 100));
} else {
System.out.println((Math.max(a, Math.max(b, c)) * 100));
}
}
}
다음은 BufferedReader
입니다.
[ 풀이 2 ]
메모리 :
14164KB
시간 :124ms
BufferedReader, StringTokenizer, Math.max()
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));
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 && b == c) {
System.out.println(10000 + (a * 1000));
} else if (a == b || a == c) {
System.out.println(1000 + (a * 100));
} else if (b == c) {
System.out.println(1000 + (b * 100));
} else {
System.out.println((Math.max(a, Math.max(b, c)) * 100));
}
}
}
Scanner
보다는 BufferedReader
가 성능이 우수한 걸 알 수 있고, 만약 위의 Math.max()
를 사용하지 않고 나는 오로지 if-else
를 이용하여 코드 작성을 해보고 싶다하시는 분들도 계실까봐 아래의 풀이 3번에 정리해보았습니다. 이럴 경우 상당히 if-else
문에 if-else
문을 겹겹히 쌓아야되는 경우가 발생합니다. 코드는 아래와 같습니다.
[ 풀이 3 ]
메모리 :
17684KB
시간 :208ms
Scanner, if-else
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();
s.close();
if (a != b && a != c && b != c) { // a, b, c가 모두 다른 숫자 일 경우,
int top;
if (a > b) { // b보다 a가 큰지
if (c > a) { // 크면 c가 a보다 큰지
top = c; // c가 크다면 c가
} else { // 그렇지 않으면
top = a; // a가 가장 큰 숫자
}
} else { // b보다 a가 크지 않으면
if (c > b) { // c랑 b를 비교해서 c가 크면
top = c; // c가 가장 큰 숫자
} else { // c랑 b를 비교해서 b가 크면
top = b; // 가장 큰 숫자는 b
}
}
System.out.println(top * 100); // 가장 큰 숫자와 100을 곱해줌.
}
else {
if (a == b && a == c) { // a, b, c가 모두 같을 때
System.out.println(10000 + a * 1000);
} else {
if (a == b || a == c) { // a, b, c 중 두 숫자만 같을 경우
System.out.println(1000 + a * 100);
} else { // a, b, c 중 두 숫자만 같을 경우
System.out.println(1000 + b * 100);
}
}
}
}
}
위처럼 구현할 수도 있으며, 위의 코드와 같이 if-else
문이 길어진다.
댓글 남기기