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
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 정수 내림차순으로 배치하기 (0) | 2023.04.06 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 자연수 뒤집어 배열로 만들기 (0) | 2023.04.06 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 문자열 내 p와 y의 개수 (0) | 2023.04.06 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 나머지가 1이 되는 수 찾기 (0) | 2023.04.06 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : x만큼 간격이 있는 n개의 숫자 (0) | 2023.04.06 |