[프로그래머스 JavaScript] 정수 제곱근 판별(Math.sqrt(), Math.pow())

옹잉·2023년 11월 29일

문제

막혔던 점

처음엔 반복문을 돌려서 제곱근을 찾아야 하나 했다.. 근데 해보지 않아도 시간초과 뜰 거 같아서 시도하진 않음.
검색해보니 제곱근 구하는 메서드 Math.sqrt()가 있었다.

function solution(n) {
    let sqrt = Math.sqrt(n);
    return Math.pow(sqrt, 2) === n? Math.pow((sqrt+1),2) : -1;
}

이렇게 코드를 작성했는데 몇개의 테스트케이스가 통과되지 않았다. Math.sqrt()는 항상 부동소수점을 반환하므로, 정확한 정수 제곱근을 얻을 수 없다. 이로 인해 제곱근과 제곱 연산을 통해 n을 비교할 때 정확한 결과가 나오지 않았다. 이를 해결하기 위해 Math.floor()를 이용해 정수 부분만 사용해 통과했다.

💡TIL

Math.sqrt(x) : 숫자 x의 제곱근을 반환
Math.pow(base, exponent) : base 에 exponent를 제곱한 값을 반환

풀이

function solution(n) {
    let sqrt = Math.sqrt(n);
    return Math.pow(Math.floor(sqrt), 2) === n? Math.pow((sqrt+1),2) : -1;
}

반복문 풀이

function solution(n) {
    for (let x = 1; x <= n; x++) {
        if (x * x === n) {
            return Math.pow((x + 1), 2);
        }
    }
    return -1;
}

내장함수 사용 시 모든 테스트 케이스가 0.03ms 소요됐는데, 반복문으로 했을 때 최대 32.44ms로 엄청난 실행 시간 차이가 났다.

profile
틀리더라도 🌸🌈🌷예쁘게 지적해주세요💕❣️

0개의 댓글