Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 정수 제곱근 판별 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 정수 제곱근 판별

썸머몽 2023. 4. 6. 01:37
728x90

문제 및 제한사항

 

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.

n 양의 정수 x 제곱이라면 x+1 제곱을 리턴하고, n 양의 정수 x 제곱이 아니라면 -1 리턴하는 함수를 완성하세요.

 

**제한사항**

n 1이상, 50000000000000 이하인 양의 정수입니다.

 

풀이 방법

 

예를 들어 n = 121이라면 제곱근인 11에 1을 더한 후 해당 수를 제곱하여 리턴하면 된다. (144)

 

먼저 주어진 n의 제곱근을 찾는다. 그리고 n의 제곱근 * n의 제곱근을 때 n이 나온다면 pow를 써서 해당 제곱근에 1을 더한 후 제곱해준다.

그렇지 않으면 -1을 리턴하도록 if문을 짜주었다.

 

이 때 아래 코드를 보면 Math.ceil을 사용한 걸 알 수 있다.

이걸 사용하지 않으니 오류가 나 질문 게시판을 뒤져보니, sqrt를 쓰면 문제에서 소수점 8번째 자리까지만 반환하게 되어,

그보다 아랫값들은 확인할 수 없어 소수점을 완전히 비교할 수 없게 되는 문제가 발생한다는 걸 알게 되었다.

 

생각해보면 우리는 제곱근 * 제곱근이 n이 나오는지만 알면 되기 때문에, 제곱근이라면 parseInt를 쓰든 Math.ceil을 쓰든 문제가 되지 않는다.

따라서 소수점이 많은 경우를 고려하여 Math.ceil을 써 소수점 8번째 자리 이후까지 비교해 오류를 차단했다.

 

코드

function solution(n) {
    let nSQRT = Math.ceil(Math.sqrt(n))
    if (nSQRT * nSQRT === n) {
        return Math.pow(nSQRT+1, 2)
    } else {
        return -1
    }
}
728x90