(SEB_FE) Section1 Unit5 연습 문제-변수와 자료형

PYM·2023년 2월 20일
0

(SEB_FE) SECTION1

목록 보기
18/38
post-thumbnail

Q. is Pythagorean?

문제

삼각형의 세 변을 입력받아 직각삼각형(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;
}

▼▼▼Reference▼▼▼

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;
profile
목표는 "함께 일하고 싶은, 함께 일해서 좋은" Front-end 개발자

0개의 댓글