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 메서드를 사용해서 해결하였다. 코드가 훨씬 간결해지고 소요 시간도 눈에 띄게 감소되었다.