문제

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

직각삼각형이 되기위한 조건은 a²+b²=c² 가 성립해야한다.
빗변의 길이제곱이 나머지 각 두변의 제곱을 더한값과 같아야한다.
⭕ 풀이
const input=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let p=input.pop();
for(let i=0;i<input.length;i++){
let arr=input[i].split(' ').map(x=>Number(Math.pow(x,2)));
arr.sort(function(a,b) {
return a-b;
});
console.log(arr[0]+arr[1]==arr[2]?"right":"wrong");
}
당연히 입력예제처럼 가장큰변의 값을 마지막에 입력하는줄알았는데
아닌것같다. sort함수로 정렬을 해주어야했다.
이후 정렬하고 분명 맞게 적은것같은데 자꾸 틀리길래
이전에도 이런적이있어 혹시몰라 trim을 추가해줬더니 정답이되었다.
✅ sort
arr.sort(function(a,b) {
return a-b;
});
/////////////////
sort((a,b)=>a-b);
sort()함수는 파라미터가 입력되지않으면 유니코드 순서에따라 값을정렬한다.
따라서 파라미터 없이
arr=let arr=input[i].split(' ').map(x=>Number(x)).sort();
라고 적어줄시
10 6 8
25 52 60
12 13 5 가된다.
그래서 위처럼 파라미터를 받아 숫자를 오름차순으로 정렬시켜주어야한다.
혹은 아래처럼 화살표함수를 이용해서 간단하게 적어줄 수도 있다.
let arr=input[i].split(' ').map(x=>Number(Math.pow(x,2))).sort((a,b)=>a-b);
-출처
https://www.acmicpc.net/problem/4153
'Algorithm > Baekjoon(Node.js)' 카테고리의 다른 글
| [JavaSrcipt] Baekjoon - 1002 : 터렛 (0) | 2021.10.08 |
|---|---|
| [JavaSrcipt] Baekjoon - 3053 : 택시 기하학 (0) | 2021.10.07 |
| [JavaSrcipt] Baekjoon - 3009 : 네 번째 점 (0) | 2021.10.05 |
| [JavaSrcipt] Baekjoon - 1085 : 직사각형에서 탈출 (0) | 2021.10.04 |
| [JavaSrcipt] Baekjoon - 9020 : 골드바흐의 추측 (0) | 2021.10.03 |