#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if ((a != b) && (a != c) && (b != c)) {
if (a >= b) {
if (a >= c)
printf("%d", a * 100);
else
printf("%d", c * 100);
}
else if (b >= c)
printf("%d", b * 100);
else
printf("%d", c * 100);
}
else if ((a == b) && (b == c)) {
printf("%d", 10000 + a * 1000);
}
else {
if ((a == b)||(a==c)) {
printf("%d", 1000 + a * 100);
}
else if (b == c) {
printf("%d", 1000 + b * 100);
}
}
}
조건문의 이해를 돕기 위한 마지막문제 2480 문제입니다.
기억해야 할 것은 else if 문은 위에서 아래로 내려가며 조건을 검출하기 때문에 까다로운 조건을 위에 오게 끔 먼저 두고, 널럴한 조건을 아래에 두어야 합니다.
널럴한 조건을 위에 두었다간 바로 else if 문을 빠져나가게 되니까요.
만약 마지막 else문인 (a==b) || (a==c) || (b==c)를 위에 두었다면 (a==b) && (b==c) 까지 컴파일러가 도달하지 못하고 둘중 하나만 같아도 빠져나가는 상황이 계속 발생하겠죠.
이중 if문이 마음에 들지 않아서 고쳐 봤습니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if ((a != b) && (a != c) && (b != c)) {
if ((a >= b) && (a >= c))
printf("%d", a * 100);
else if ((a >= b) && (a < c))
printf("%d", c * 100);
else if ((a < b) && (b < c))
printf("%d", c * 100);
else
printf("%d", b * 100);
}
else if ((a == b) && (b == c)) {
printf("%d", 10000 + a * 1000);
}
else {
if ((a == b)||(a==c)) {
printf("%d", 1000 + a * 100);
}
else if (b == c) {
printf("%d", 1000 + b * 100);
}
}
}
어째 가독성이 더 떨어진것 같은 느낌인데요
이번 서로다른 3개의 수의 크기를 비교하는 알고리즘을 짜 보면서
3개의 크기를 비교하려면 결국 비교를 4번 해야만 한다는걸 알게 되었네요.
'문제풀이' 카테고리의 다른 글
초보자를 위한 C++ 200제 42번 문제 해석 피라미드 출력 (0) | 2023.07.04 |
---|---|
2차원 배열 도전 실전 예제 (0) | 2023.04.25 |
혼자 공부하는 C언어 도전 실전 예제 풀어 보기 (315p) (0) | 2023.04.19 |
백준 25304번 반복문 기초문제 영수증 (0) | 2023.04.14 |
백준 2884번, 2525번 시간 계산의 알고리즘 (0) | 2023.04.11 |