문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예
n | return |
---|---|
121 | 144 |
3 | -1 |
입출력 예 설명
- 입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
- 입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
고민 과정 🤔
일단 for과 if를 사용해서 i의 제곱이 n인 경우 (i+1)2을 return하고 i의 제곱에 n이 없는 경우 -1을 return하게 했다. 하지만 이렇게 코드를 짜니 오류가 발생했다. i가 0부터 돌기 시작하는데 첫번째 if 조건에 맞지 않으니 바로 else로 넘어가서 -1을 return 했다. if의 첫번째 조건에서 for이 다 돌아가게 만들어야 했다. 그 다음으로 생각한 것이 아예 처음부터 변수 -1을 설정해 주고 if의 조건이 맞으면 변수의 값을 (i+1)2로 수정하고 조건에 맞지 않으면 변수의 값, 즉 -1을 그대로 return 하는 방법이다. 다 왔다고 생각했는데 또 벽에 부딪혔다. for의 조건에서
(let i=0; i<n; i++)
로 설정해 놨더니n=1
일 경우,i<n
이기 때문에 1*1이 진행이 안되서 오류가 났다 그래서 for의 조건범위를i<n+1
로 조정했고 it worked finally!
나의 풀이
function solution(n) {
let defaultValue = -1
for(let i=1; i<n+1; i++){
if(i**2 === n){
return defaultValue = (i+1) ** 2;
}
}
return defaultValue
}