본문 바로가기

문제풀이

[C언어] 백준 4153번 직각삼각형

int main()
{
	int a, b, c;

	while(scanf("%d %d %d", &a, &b, &c) && a)
		puts(a * a == b * b + c * c || b * b == c * c + a * a || c * c == a * a + b * b ? "right" : "wrong");
	
	return 0;
}

 

a = b = c 0일 때 반복문을 중단하도록 하는 게 가장 문제의 의도에 맞겠으나

문제가 제시하는 인풋 요건에 따르면, 세 변 모두가 정상적인 테스트라면 양의 정수로 주어진다.따라서 프로그램이 종료되는 시점은 하나의 값이라도 0(실제로는 모든 값이 0)이 되는 시점이기 때문에 반복문의 조건은 a > 0으로 한다.

 

가장 큰 수가 a가 되도록 스왑을 해야하나, a, b, c값을 먼저 비교해 출력문을 작성해야 하나 살짝 고민했지만여기서 관심사는 수가 어떤 순서로 주어졌는지와 무관하다.그래서 단순히 하나라도 세 변의 조건을 만족한다면 right, 아니라면 wrong을 출력했다.