![[백준] 2480 - 주사위 세 개](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsrzR3%2FbtsyDv62U2t%2FM7y2QenFLSGmzUiiWuOd5k%2Fimg.png)
• 문제


이해하면 어렵지않은 문제이지만, 처음 코드를 본다면 난해한 문제입니다.
코드가 복잡해보인다고해서 포기하지않고 끝까지 풀어봐주세요 !
• 풀이
먼저 주사위 A, B, C의 값을 각각 입력받습니다.
그리고 상금을 계산하기위한 정수타입변수 result를 선언해주도록 하겠습니다.
문제를 풀기위해 생각해야하는 경우의 수는 3가지입니다.
1. A,B,C가 모두 같은경우
2. A,B,C가 모두 다른경우
3. A,B,C중 두 개만 같은경우
1,2의 경우에는 식으로 표현하면 아주 쉽게 표현할 수 있습니다.
A,B,C가 모두 같은경우는 A == B && B == C,
A,B,C가 모두 다른경우는 A != B && B != C && A != C 와같이 식으로 표현할 수 있습니다.
A,B,C중 두 개만 같은경우는 else로 집어 넣겠습니다.
각 경우의 수에대해서 상금을 계산하는 식은
A,B,C가 모두 같은경우(A == B && B == C)이면 result = 10000 + A * 1000입니다. 주사위 세 개의 수는 모두 같은 값이기때문에 A,B,C중 아무 값을 넣어도 상관없습니다.
A,B,C가 모두 다른경우(A != B && B != C && A != C)이면 result = 가장 큰 눈 * 100입니다. (이 때 가장 큰 눈을 max변수로 선언하겠습니다.)
여기서 max의 값을 찾아야하는데, 이 과정이 조금 복잡할 수 있습니다.
먼저 A가 기준인 경우입니다.
if(A>B) {
if(A>C) {
max = A;
}else {
max = C;
}
(A>B)가 참이고, (A>C)도 참이면 당연히 max값은 A가 됩니다.
(A>B)가 참이고, (A>C)가 거짓이면 A는 B보단 크지만 C보단 작기때문에 max값은 C가됩니다.
이어서 B가 기준인 경우를 보겠습니다.
else if(B>C) {
max = B;
}else {
max = C;
}
B를 기준으로 살펴볼 때는 (A>B)가 false인 즉, B가 A보다 큰 상태입니다.
따라서 (B>C)이면, max는 B가 됩니다.
(A>B)가 false이고, (B>C)도 false이면 max = C가 됩니다.
이렇게해서 max값은 구하였기때문에 result를 구하는 식을 써주어 마무리해주면 됩니다.
모든 주사위의 눈이 다른경우 max값을 찾은 뒤, result를 구하는 코드입니다.
else if(A != B && B != C && A != C) { //모든 주사위의 눈이 다른경우
if(A>B) { //A가 B보다 크고
if(A>C) { //A가 C보다 큰경우 max = A
max = A;
}else { //A가 B보단 크지만 C보단 작은경우 max = C
max = C;
}
}else if(B>C) { //(A>B)가 false인 경우 즉, B>A이고 B>C이면 max = B
max = B;
}else { // B>A이지만 C>B이면 max = C
max = C;
}
result = max * 100;
이제 주사위의 눈이 두 개만 같은경우의 result값만 구해내면 됩니다.
이 경우에도 max값을 찾아야하는데, 이 때는 A B C 세 값중 두 개의 값이 동일하면 그 값이 max값 이기때문에 비교적 찾는방법이 간단합니다.
코드로 바로보시면 이해가 되실겁니다.
else{ //주사위의 눈이 2개만 같은경우
int num = 0;
if(A == B) {
num = A;
}else if(A == C) {
num = A;
}else if(B == C) {
num = B;
}
result = 1000 + num * 100;
}
num변수를 선언해 조건문을 통해 두 개의 값이 같은경우 같은 값을 num에 저장해 result값을 계산해줍니다.
아래는 총 코드입니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int C = sc.nextInt();
int result = 0;
int max = 0;
if(A == B && B == C) { //모든 주사위의 눈이 같을 경우
result = 10000 + A * 1000;
}else if(A != B && B != C && A != C) { //모든 주사위의 눈이 다른경우
if(A>B) { //A가 B보다 크고
if(A>C) { //A가 C보다 큰경우 max = A
max = A;
}else { //A가 B보단 크지만 C보단 작은경우 max = C
max = C;
}
}else if(B>C) { //(A>B)가 false인 경우 즉, B>A이고 B>C이면 max = B
max = B;
}else { // B>A이지만 C>B이면 max = C
max = C;
}
result = max * 100;
}else{ //주사위의 눈이 2개만 같은경우
int num = 0;
if(A == B) {
num = A;
}else if(A == C) {
num = A;
}else if(B == C) {
num = B;
}
result = 1000 + num * 100;
}
System.out.println(result);
}
}
•마무리
개인적으로 저는 이 문제를 풀면서 너무 복잡하고 어렵다고 생각했고 다른 블로거분들의 좋은 글을 봐도 이해가 안됐었습니다...
그래서 제 블로그를 보시는 분들만큼은 쉽게 이해하였으면 좋다고 생각해서 말로도 설명해보고 주석에는 식으로 표현해 여러가지 방법으로 설명해보았습니다... 그래도 이해가 안되시는 분들은 댓글 달아주시면 감사하겠습니다 ㅠㅠ
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10950 - A + B - 3 (0) | 2023.10.17 |
---|---|
[백준] 2739 - 구구단 (0) | 2023.10.17 |
[백준] 2525 - 오븐 시계 (1) | 2023.10.17 |
[백준] 2884 - 알람 시계 (1) | 2023.10.17 |
[백준] 14681 - 사분면 고르기 (0) | 2023.10.16 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!