https://www.acmicpc.net/problem/2480
주사위 세개를 던져 중복 숫자에 따라 상금을 받는 게임이다.
체크해야 될 점은
1. 주사위 3개가 다 중복인지
2. 주사위 3개중 2개만 중복인지
3. 주사위가 모두 중복이 안되는지
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int z = scan.nextInt();
if(x == y && y == z) {
System.out.println(10000+x*1000);
}else if(x == y || x == z || y == z) {
if(y == z) {
System.out.println(1000+z*100);
}else {
System.out.println(1000+x*100);
}
}else {
if(x >= y && x >= z) {
System.out.println(x*100);
}else if(y >= x && y >= z) {
System.out.println(y*100);
}else {
System.out.println(z*100);
}
}
}
}
1. 모든 주사위가 중복일 떄
if(x == y && y == z) {
System.out.println(10000+x*1000);
}
처음 if문으로 x y z가 모두 중복인 경우를 잡았다
2. 2개의 주사위만 중복일 때
else if(x == y || x == z || y == z) {
if(y == z) {
System.out.println(1000+z*100);
}else {
System.out.println(1000+x*100);
}
}
|| 를 이용하여 x y z중 두개만이 중복인 상태를 만들었고,
중복된 값에 의해 상금이 달라지니 경우의 수를 따졌을 때 y==z 외에는 x가 다 들어가서
y==z는 z값에 의해 상금이 나오게 만들어줬고, 그 외에는 x값에 의해 상금이 나오게 만들어줬다.
3. 모두 중복이 아닐 때
else {
if(x >= y && x >= z) {
System.out.println(x*100);
}else if(y >= x && y >= z) {
System.out.println(y*100);
}else {
System.out.println(z*100);
}
}
마지막 else로는 세개의 중복, 두개만 중복 외에 경우로 잡힐테니, 그 중 제일 큰 숫자만 찾아내면 된다
x가 클 경우엔 x>=y && z>=z , y가 클 경우엔 y>=x && y>=z, 그 외엔 z로 상금 계산에 들어갈 값을 정해준다.
작성을 하고 나서 코드를 더 줄여보고 싶은 마음에 진행해보았다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int z = scan.nextInt();
if(x == y && y == z) {
System.out.println(10000+x*1000);
}else if(x == y || x == z || y == z) {
System.out.println(1000+((x == y || x == z) ? x : z)*100);
}else {
System.out.println((Math.max(x, Math.max(y, z)))*100);
}
}
}
1. 주사위 세개가 중복일때는 그대로 진행하였다.
if(x == y && y == z) {
System.out.println(10000+x*1000);
}
2. 두개만이 중복일때 수정
else if(x == y || x == z || y == z) {
System.out.println(1000+((x == y || x == z) ? x : z)*100);
}
((x == y || x == z) ? x : z)
> x가 y와 같거나 x가 z와 같으면 x값을 그 외에는 z값을 적용한다라는 뜻이다.
3. 모든 주사위가 중복이 아닐 때 수정
else {
System.out.println((Math.max(x, Math.max(y, z)))*100);
}
(Math.max(x, Math.max(y, z)))
Math.max를 이용해서 두개의 값중 더 높은 값을 구하여 상금 계산을 했다.
Math.max(a,b)의 결과값은 a와 b중의 높은값을 나타내주는거다.
그럼 Math.max안에 Math.max가 또 들어가 있으니 먼저 y와 z중의 높은값을 구하고 그 높은값과 x를 비교하여 세개의 값 중 제일 높은 숫자를 나타내준다.
'백준' 카테고리의 다른 글
백준 8393 합 (0) | 2025.01.01 |
---|---|
백준 10950 A+B -3 (0) | 2024.12.31 |
백준 2739 구구단 (1) | 2024.12.30 |
백준 2525 오븐시계 (1) | 2024.12.28 |
백준 2884 알람시계 (0) | 2024.12.27 |