문제풀이
백준 2480번 서로다른 3개의 수의 크기 비교 하기
막뇌
2023. 4. 11. 12:18
#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번 해야만 한다는걸 알게 되었네요.