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

+ Recent posts