이 글에서는 정수 하나를 입력받아 그 수의 제곱근이 정확히 떨어지는 경우에는 해당 정수를, 그렇지 않은 경우에는 제곱근이 위치한 두 정수 사이의 범위를 배열로 반환하는 자바스크립트 함수를 구현하는 방법을 알아보겠습니다.
문제 정의
정수 n을 매개변수로 받아 다음 중 하나를 반환하는 함수를 작성해야 합니다.
- n이 완전제곱수인 경우: k * k == n을 만족하는 정수 k를 반환
- n이 완전제곱수가 아닌 경우: k * k < n < (k+1) * (k+1)을 만족하는 연속된 두 정수의 범위 [k, k+1]을 반환
즉, 입력값의 제곱근이 딱 떨어지면 그 값을 그대로 돌려주고, 소수점 이하가 남으면 제곱근이 어느 두 정수 사이에 있는지 알려주는 방식입니다.
구현 코드
const num = 83;
const squareRootRange = (num = 1) => {
const exact = Math.sqrt(num);
if (exact === Math.floor(exact)) {
return exact;
} else {
return [Math.floor(exact), Math.ceil(exact)];
}
};
console.log(squareRootRange(num));
코드 동작 원리
함수의 핵심 로직은 다음과 같습니다.
- Math.sqrt()로 입력값의 실제 제곱근을 계산합니다. 예를 들어 Math.sqrt(83)은 약 9.1104...입니다.
- Math.floor()와 비교하여 제곱근이 정수인지 확인합니다. 값이 자기 자신의 내림 값과 같다면 완전제곱수라는 의미입니다.
- 완전제곱수라면 그 정수를 그대로 반환합니다. 예를 들어 64를 넣으면 8이 반환됩니다.
- 그렇지 않다면 Math.floor()와 Math.ceil()을 활용해 제곱근이 끼어 있는 바로 아래 정수와 바로 위 정수를 배열 형태로 반환합니다.
실행 결과
83의 제곱근은 약 9.11이므로, 9² = 81 < 83 < 10² = 100이 성립합니다. 따라서 콘솔에는 다음과 같은 결과가 출력됩니다.
[9, 10]
이처럼 간단한 조건 분기만으로 제곱근의 존재 여부를 판별하고, 없다면 인접한 두 정수 사이의 범위를 손쉽게 구할 수 있습니다. 유효성 검사나 근사값 계산 등 다양한 상황에서 유용하게 응용할 수 있습니다.