[백준] 4153번 직각삼각형 C++ 문제 풀이 수학 2

2020. 2. 28. 12:07알고리즘/백준

728x90
반응형

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

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

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.


예제 입력 1

6 8 10

25 52 60

5 12 13

0 0 0


예제 출력 1

right

wrong

right


문제 풀이

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
  while(1){
    vector<int> vec;
    int i=0,t;
    for(;i++<3;){
      cin>>t;
      vec.push_back(t);
    }
    if(!(vec[0]+vec[1]+vec[2]))break;    
    sort(vec.begin(), vec.end());      
    cout<<(vec[0] * vec[0] + vec[1] * vec[1] == vec[2] * vec[2]?"right\n":"wrong\n");      
  }
}

 

모두 0이면 입력을 종료합니다.

양의 정수만 입력되므로 세 수의 합이 0이면 모두 0이기 때문에 다음과 같이 구현하였습니다.

if(!(vec[0]+vec[1]+vec[2]))break;

입력받은 vector를 정렬하면 맨 끝에 가장 큰 수가 위치하게 되므로

vec[0]²  + vec[1]² = vec[2]² 이 성립해야 직각삼각형이게 됩니다.

참일 경우 right을 출력하고 거짓일 경우 wrong을 출력하면 됩니다.

 

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

 

4153번: 직각삼각형

문제 과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오. 입력 입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다. 출력 각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다. 예제 입력 1 복사 6 8

www.acmicpc.net

 

728x90
반응형