티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 5073번 삼각형과 세 변

https://www.acmicpc.net/problem/5073

 

5073번: 삼각형과 세 변

각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

3개의 정수를 반복하여 입력 받음

0 0 0 이 나오기 전 까지 아래 규칙에 따라 출력

(단, 삼각형이 될 수 없으면 "Invalid" 출력)

 

2. 풀이

삼각형이 될 수 없는 조건을 확인하기 위해서는

가장 긴 변이 무엇인지와, 나머지 두 변이 무엇인지를 확인해야 합니다.

 

따라서 3개의 값을 배열로 각각 입력받고 (a[0], a[1], a[2])

해당 배열을 오름차순 정렬하여 확인했습니다.

 

정렬은 효율적이진 않지만 구현이 쉬운 버블정렬를 활용했습니다.

(이 문제의 경우 최대 3번 swap 하므로 정렬 시간이 문제가 되지는 않습니다)

 

그 외 풀이는 if ~ else if ~ else 구문으로 단순한 문제이니

아래 코드로 설명 대체하겠습니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
5073_삼각형과 세 변
1116KB	0ms
*/
#include <cstdio>

const int LM = 3;
int a[LM];

void bSort() {
	for (int i = 0; i < LM - 1; ++i) {
		for (int j = 0; j < LM - (i + 1); ++j) {
			if (a[j] < a[j + 1]) {
				int t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
}

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	while (1) {
		scanf("%d %d %d", &a[0], &a[1], &a[2]);
		if (!a[0] && !a[1] && !a[2]) break;

		bSort();
		
		if (a[0] >= a[1] + a[2]) printf("Invalid\n");
		else if (a[0] == a[1] && a[1] == a[2]) printf("Equilateral\n");
		else if (a[0] == a[1] || a[1] == a[2]) printf("Isosceles\n");
		else printf("Scalene\n");
	}
	return 0;
}
728x90
반응형
댓글