백준 웹사이트 "4153번 - 직각삼각형" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#include <stdio.h>
int is_right(int a, int b, int c);
int main(void){
while(1){
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
if(x==0 && y==0 && z==0)
break;
else{
if(is_right(x,y,z))
printf("right\n");
else
printf("wrong\n");
}
}
}
int is_right(int a, int b, int c){
int max, num1, num2;
if(a>=b && a>=c){ //a가 최대
max = a;
num1 = b;
num2 = c;
}
else if(b>=c){ //b가 최대
max = b;
num1 = a;
num2 = c;
}
else{ //c가 최대
max = c;
num1 = a;
num2 = b;
}
if(max*max == num1*num1 + num2*num2)
return 1;
else
return 0;
}
문제 풀이
일명 '수포자'인 분들도 피타고라스의 정리에 대해서는 알고 있을 것입니다 (수포자인 분이 제 블로그까지 찾아올 확률은 거의 없겠지만요ㅎㅎ). 피타고라스의 정리를 이용하면 아주 쉽게 풀 수 있는 문제입니다.
깔끔한 코드를 위해 직각삼각형인지 판별하는 함수 'is_right'를 따로 작성합니다. 세 정수 a, b, c가 입력되면, 우선 이들의 최댓값을 구해 max에 저장하고, 나머지 두 수를 num1, num2에 저장합니다. 세 정수의 최댓값이 곧 빗변이기에, max의 제곱이 num1의 제곱과 num2의 제곱의 합과 같다면 직각삼각형이 됩니다. 이때 return 값이 0 또는 1인데, C언어는 boolean이 따로 없고 0은 false를, 1은 true를 의미하기 때문입니다. 만약 python과 같은 언어였다면 boolean을 이용했을 것입니다.
main 함수는 '0 0 0'이 입력될 때까지 계속해서 입력을 받도록 while문과 break를 이용합니다. 함수 is_right는 Line 12의 조건문에서 이용되는데, 여기서 함수의 편리성을 체감할 수 있습니다. Line 20 ~ 42에 해당하는 is_right 함수의 코드 전체가 if문의 조건문에 쓰여있다고 생각해보세요! 작성하는데도 이해하는데도 헷갈리겠죠? 이처럼 함수를 적재적소에 잘 이용하면, 코드가 훨씬 아름다워집니다.
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 1002번 - 터렛 (0) | 2022.01.29 |
---|---|
[백준/C언어] 3053번 - 택시 기하학 (0) | 2022.01.28 |
[백준/C언어] 3009번 - 네 번째 점 (0) | 2022.01.27 |
[백준/C언어] 1085번 - 직사각형에서 탈출 (0) | 2022.01.26 |
[백준/C언어] 9020번 - 골드바흐의 추측 (0) | 2022.01.26 |