삼각형의 세 변을 입력받아 직각삼각형(pythagorean)인지 여부를 리턴해야 합니다.
주의 사항
- 삼각형의 각 세 변은 무작위로 입력됩니다.
- 자바스크립트에서 x의 제곱(x squared)을 구하는 방법은 3가지 입니다. 세 가지 방법을 모두 사용해야 합니다.
arr.sort
사용은 금지됩니다.- 제곱을 구할 때는 입력으로 주어지는 변수를 그대로 사용해야 합니다.
이 문제에서 좀... 버벅였다. 인자로 받은 세 개의 숫자 중 가장 큰 수를 찾는 과정이 관건이었다.
내 알고리즘은
받은 인자들을 정렬해서 큰 수의 제곱 === 나머지 두 수의 제곱의 합
이면 true를 넘겨주고 아니면 false를 넘겨주는 식으로 풀려고 했다.
근데... arr.sort
는 사용 금지라길래... 직접 버블 정렬을 구현했다. (바보) 정렬을 금지시킨 이유가 있을 텐데... 난 단순히 sort
를 내장 함수 없이 구현할 수 있는가를 평가한다고 생각했다. 그게 아니었는데... 여하튼 통과하긴 했다. sort는 사용하지 않았으니까😂
function isPythagorean(side1, side2, side3) {
// TODO: 여기에 코드를 작성합니다.
//마지막에 리턴할 결과값 변수
let result = true;
//버블 정렬을 위한 배열
let array = [side1, side2, side3];
//버블 정렬
for (let i = 0; i < array.length; i++) {
let swap;
for (let j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
swap = array[j];
array[j] = array[j + 1];
array[j + 1] = swap;
}
}
}
//정렬된 배열에서 가장 큰 수를 maxNum 변수에 할당
let num1 = array[0]
let num2 = array[1]
let maxNum = array[2]
//각 변의 길이 제곱 (세가지 방법)
let powNum1 = num1*num1;
let powNum2 = Math.pow(num2, 2);
let powNum3 = maxNum**2;
//피타고라스 정리
if (powNum1 + powNum2 === powNum3) {
result = true;
}
else {
result = false;
}
//결과값 리턴
return result;
}
function isPythagorean(side1, side2, side3) {
const pow1 = side1 * side1;
const pow2 = side2 ** 2;
const pow3 = Math.pow(side3, 2);
return (pow1 + pow2) === pow3 || (pow2 + pow3) === pow1 || (pow1 + pow3) === pow2;
}
... 모범답안을 보고 순간 머리가 띵~ 했다... 저런 식으로도 풀 수 있구나...
인자로 받은 숫자가 각각 다 가장 긴 변일때를 계산 후, OR 연산자를 사용해서 전부 다 성립하면 true가 반환되면 되는 거였다!
이렇게 하니까 코드 길이가 훨씬 줄어들어서 깔끔해 보였다.
생각해 보니 피타고라스의 정리에 필요한 숫자는 단 3개니까, 굳이 정렬 함수를 길게 적을 필요도 없는 거였다. 모든 경우의 수라 해 봤자, 3개가 다니까.
//다시 한번 기억하자! // JS에서 제곱하는 방법 3가지! let powNum1 = num1*num1; let powNum2 = Math.pow(num2, 2); let powNum3 = maxNum**2;