(알고리즘 복습하기😜)
<문제>
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
오답
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()
결과적으로 다른 방법으로 정답을 맞췄더라도
어느 부분에서 막혔고 실수했는지 꼭 짚고 넘어가는 습관을 기르자! 😃