궤도

[EPPER] 10회 5번 본문

💻 현생/⛓ 알고리즘

[EPPER] 10회 5번

영이오 2020. 10. 8. 23:04

문제

 


풀이

 

이 문제에서 가장 중요한건 두가지이다. 하나는 중복을 제거하는 것이고 남은 하나는 c가 가장 긴 변이 되도록 하는 것이다.

i와 j를 이용해 a와 b변의 길이를 정하고 총 길이 n에서 이 둘을 뺀 값이 c가 되도록 한다. 반복문을 보면 알겠지만 i<=j가 되도록 설정했다. 그리고 가장 긴 변이 될 c의 길이가 두번째로 긴 변인 j보다 작은지 확인한다.(같은건 상관없다) c가 가장 긴 변이라는 것을 확인한 뒤에는 ※의 조건을 적용해 삼각형 여부를 체크한다.

 

좀 더 계산을 했다면 반복문을 끝내는 조건을 tight하게 잡을 수 있었겠지만, 귀찮았다. 뭐 가장 바깥쪽에 있는 for loop에서의 n-2를 n/3으로 수정할 수는 있겠다.


소스코드

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int n, c;
	int sum = 0;

	scanf("%d", &n);
	for (int i = 1; i <= n - 2; i++) { //i<=j<=c가 되도록, c가 가장 긴 변
		for (int j = i; j <= n - 2; j++) {
			c = n - i - j;
			if (c < j)
				break;
			else if (c < n - c) //c가 나머지 두 변의 합보다 작다면 삼각형임
				sum++;
		}
	}
	printf("%d\n", sum);
}
Comments