
처음엔 반복문을 돌려서 제곱근을 찾아야 하나 했다.. 근데 해보지 않아도 시간초과 뜰 거 같아서 시도하진 않음.
검색해보니 제곱근 구하는 메서드 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()를 이용해 정수 부분만 사용해 통과했다.
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로 엄청난 실행 시간 차이가 났다.