프로그래머스 - 정수 제곱근 판별

Kyle·2022년 9월 4일
0

Algorithm

목록 보기
1/4

https://school.programmers.co.kr/learn/courses/30/lessons/12934

위의 문제는 프로그래머스 Lv1의 정수 제곱근 판별 문제이다.

1차적으로는 다음과 같이 코드를 작성하였다.

function solution(n) {
  let index = 0;
  const arr = [];
  while (index <= n) {
    if (n % index === 0) {
      arr.push(index);
    }
    index += 1;
  }
  if (arr.length % 2 === 0) {
    return -1;
  } else {
    const locate = parseInt(arr.length / 2);
    const result = (arr[locate] + 1) * (arr[locate] + 1);
    return result;
  }
}

다음과 같이 작성하였더니 처참한 결과가 나왔다.

제곱근은 약수의 개수가 홀수인 것에 착안하여 작성한 코드이다.
콘솔로 index를 찍어보면 121을 입력했을 경우에 121의 약수들인 1,11,121가 배열 arr에 담긴다. 허나 큰 숫자로 갈 경우에 약수를 찾는데 시간이 너무 오래 걸리는 당연한 문제를 직면했다.

function solution(n) {
  let sqrt = Math.sqrt(n);
  if (sqrt % 1 === 0) {
    let result = (Math.sqrt(n) + 1) * (Math.sqrt(n) + 1);
    return result;
  } else {
    return -1;
  }
}

위의 문제를 Math 내장함수에서 sqrt 메서드를 사용해서 해결하였다. 코드가 훨씬 간결해지고 소요 시간도 눈에 띄게 감소되었다.

profile
불편함을 고민하는 프론트엔드 개발자, 박민철입니다.

0개의 댓글