Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 4153 : 직각삼각형

비망노트 2021. 10. 6. 20:39

문제

과거 이집트인들은 각 변들의 길이가 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