임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
문제의 핵심은 파라메터로 제공된 n을 판별하는 조건문을 사용해야 한다는 점이다. 처음에는 x를 판별하기 위해 for문을 순회해 x값을 도출하려했다. 하지만, 이러한 경우 for문이 순차적으로 돌면서 첫 번째 조건을 쉽게 도출할 수 있지만, 두번째 조건을 도출하려면 얼리 리턴되버리는 문제를 가지고 있었다.
그래서 새롭게 생각한 풀이 방법은 차근차근 제곱의 수를 구하는 것이다. Math.sqrt()
를 이용해 제곱된 수 x를 정의하고, 이 수를 다시 정수로 만들어주는 메소드는 Math.floor
를 사용했다. 다음은 첫번째 방식과 같은 방법으로 조건문을 사용해서 문제를 해결했다.
function solution(n) {
let x = Math.floor(Math.sqrt(n));
let trueNum = Math.pow([x],[2]);
if(n === trueNum) {
return Math.pow([x+1],[2]);
} else {
return -1;
}
}
function nextSqaure(n){
var result = 0;
var n = Math.sqrt(n);
result = Number.isInteger(n) ? Math.pow(n+1, 2) : 'no';
return result;
}
정수 판별식 메소드는 isInteger를 사용한 점이 인상 깊었다. 삼항 연산자를 사용하니 코드가 깔끔하게 구분이 된다.