문제풀이

백준 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번 해야만 한다는걸 알게 되었네요.