문제 >
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
입력 >
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
출력 >
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
해결방법 >
피타고라스의 정리를 이용해서 가장 큰 변의 길이의 제곱이 나머지 두 변의 길이의 제곱의 합과 같은지 판별한다.
c^2 = a^2 + b^2
c++
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
int main(){
vector <pair<int,pair<int, int> > > v;
int a[3];
while(1){
cin >> a[0] >> a[1] >> a[2];
if(a[0] == 0 && a[1] == 0 && a[2] == 0)
break;
sort(a, a + 3);
v.push_back(pair<int, pair<int, int> >(a[2], make_pair(a[1],a[0])));
}
for(int i = 0; i < v.size(); i++){
if(pow(v[i].first, 2) == pow(v[i].second.second, 2) + pow(v[i].second.first, 2))
cout << "right\n";
else
cout << "wrong\n";
}
}
java
package baekjoon;
import java.util.*;
public class BOJ_4153 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int[] a = new int[3];
int big;
for(int i = 0; i < 3; i++)
a[i] = sc.nextInt();
if(a[1] == 0 && a[1] == 0 && a[2] == 0)
break;
for(int i = 1; i < a.length; i++) {
for(int j = i; j < a.length; j++) {
if(a[j-1] > a[j]) {
int tmp = a[j-1];
a[j-1] = a[j];
a[j] = tmp;
}
}
}
if(Math.pow(a[2], 2) == Math.pow(a[1], 2) + Math.pow(a[0], 2))
System.out.println("right");
else
System.out.println("wrong");
}
}
}
문제링크 >
https://www.acmicpc.net/problem/4153
'Problem Solving > BOJ' 카테고리의 다른 글
[백준] 11047번 - 동전 0 (0) | 2020.01.10 |
---|---|
[백준] 3053번 - 택시 기하학 (0) | 2020.01.10 |
[백준] 3009번 - 네 번째 점 (0) | 2020.01.10 |
[백준] 4948번 - 베르트랑 공준 (0) | 2020.01.10 |
[백준] 2775번 - 부녀회장이 될테야 (0) | 2020.01.10 |
댓글