[BOJ 백준] 4153 - 직각삼각형 (C++)

문제 바로가기

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

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net


 

관련 알고리즘

- 수학


정답 및 해설

정수를 3개 입력받아서 세 정수로 이루어진 삼각형이 직각 삼각형인지 확인하는 문제이다.

직각삼각형은 가장 긴 변의 제곱이 나머지 두 변 각각의 제곱의 합과 같은지 확인하여 찾아낼 수 있다.

간단한 수학 문제이니 수식을 세워서 해결하기 간단한 문제이다.

그 전에 예제 입력으로 보아 항상 긴 변이 마지막에 올거라 생각할 수도 있겠지만

가장 긴 변을 찾아서 계산을 진행해주어야 한다. (본인은 이 이유로 틀렸다...)


C++

더보기
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c,tmp;
    while(1){
        cin>>a>>b>>c;
        if(!(a||b||c)) break;
        
        if(c<a){tmp=c;c=a;a=tmp;}
        if(c<b){tmp=c;c=b;b=tmp;}
        
        if(c*c==a*a+b*b) cout<<"right\n";
        else cout<<"wrong\n";
    }
}

 

Line 해설
5~14 Line 4에서 변수를 선언한 다음 바로 무한루프 반복문으로 들어간다.
6~7 cin 함수로 세 정수 a,b,c를 입력받는다.
입력받은 후 바로 !(a||b||c) 조건으로 a,b,c가 모두 0이라면 break문으로 반복문을 종료한다.
9~10 if 조건문으로 c에 가장 큰 정수를 할당할 것이다.
Line 9만 설명하자면 a가 c보다 크다면 tmp 변수를 매개로 a와 c의 값을 바꾸어준다.
Line 10에서 b와 c를 비교하여 같은 과정을 진행한다.
12~13 c에 가장 큰 정수를 할당했기 때문에 c2=a2+b2 만 만족한다면 직각삼각형으로 판단하여 "right"를 출력한다.
아니라면 "wrong"을 출력하고 무한루프로 다시 Line 6으로 돌아가서 위 과정을 반복한다.