조건문 단계의 마지막 문제이다.
우선 필자는 대충 중복이 없게끔 코드를 줄여보았다.
import java.util.*;
public class Ex2_7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt(); // 주사위1,2,3
int prize = 0; // 상금
if(a == b && b == c) // 세 주사위가 모두 동일 한 경우
prize = 10000 + a * 1000;
else if(a == b || b == c || c == a) { // 2개가 동일한 경우
prize = 1000 + ((a == b) ? a : (b == c) ? b : c) * 100; // a 와 b의 같을 경우엔 a, 다를 경우엔 b를 반환
}
else
prize = ((a > b && a > c) ? a : (b > c) ? b : c) * 100;
System.out.println(prize);
}
}
우선 이런 문제는 풀려면 무조건 풀 수 있는 문제라고 생각한다.
하지만 문제를 푼 다음에 하면 좋은 건, 어떻게 하면 중복 제거를 할 수 있을까? 하는 것이다.
나도 아직 프로그래밍을 공부한 지 딱 한 달밖에 안 됐기에, 부족한 점은 많지만
이런 습관을 들이니 처음 이런 문제를 풀었을 때 보다 코드가 많이 간결해지고 있다는 걸 느낀다.
위의 코드에 대해 추가 설명을 하자면
1. 세 눈이 동일한 경우엔 a, b, c 아무거나 곱해도 상관없다.
2. 두 눈이 동일한 경우엔, 삼항 연산자를 보면 이해하기 쉬울 것이다.
3. 모든 눈이 다른 경우엔 주로 max 변수를 생성하여 if문으로 비교하는데 그것보다 위 삼항 연산자로 하면 간결하게 처리할 수 있다.
다만 3번에서 첫 조건식에 한 가지의 경우만 크기 비교를 한다면 오차가 생기니 주의하자.
'알고리즘 분류 > Step2 조건문' 카테고리의 다른 글
</Step2_6> 2525 오븐 시계 JAVA (0) | 2023.03.11 |
---|---|
</Step2_5> 2884 알람 시계 JAVA (0) | 2023.03.11 |
</Step2_4> 14681 사분면 고르기 JAVA (0) | 2023.03.11 |
</Step2_3> 2753 윤년 JAVA (0) | 2023.03.11 |
</Step2_2> 9498 시험 성적 JAVA (0) | 2023.03.11 |