[JavaScript] 알고리즘 / 정수 제곱근 판별

Yeeeeeun_IT·2022년 9월 30일
0

(알고리즘 복습하기😜)

정수 제곱근 판별

<문제>
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

✔︎ SQRT (square root: 제곱근)

오답

function solution(n) {
 let answer = 0;
 for (let x=1; x<=n; x++)
 	if ( Math.sqrt(n) === x ){
         answer = (x+1)**2
    	// console.log(x) // 11
    	// console.log(answer) // 144
    }
    else { 
    	answer = -1 
    }
    return answer;
 }
 //  
 solution(121) // -1 (기댓값 144) 

위의 결과는 아무리 해도 -1이 리턴되었다.
위에서 콘솔을 찍어보면 x값과 answer을 제대로 구한듯하나,
else 부분에서 최종적으로 -1의 값을 리턴하게 된다. 왜일까???

for문에서 x<=n 부분을 x*x<=n으로 하여 x의 범위를 제대로 설정해주면 정답이 나온다!

참고 답안 1

function solution(n) {
    const sqrt = Math.sqrt(n);  // 제곱근 구하기
    if ( n % sqrt === 0 ) {
        return (sqrt + 1) ** 2;
    }
    return -1;
}

참고 답안 2

function solution(n) {
    let sqrt = Math.sqrt(n);
    if ( Number.isInteger(sqrt) === true ) {
        // 제곱근이 정수인 경우 true 반환
        sqrt++; // 제곱근에 1더하기
    	return sqrt * sqrt;
    } else {
    	return -1;
    }
}

✔︎   제곱근 구하기   Math.sqrt()
✔︎   거듭제곱 구하기   Math.pow()
✔︎   정수 판별하기 Number.isInteger()

결과적으로 다른 방법으로 정답을 맞췄더라도
어느 부분에서 막혔고 실수했는지 꼭 짚고 넘어가는 습관을 기르자! 😃

profile
🍎 The journey is the reward.

0개의 댓글