[JavaScript] 정수 제곱근 판별

프로그래머스: 변수를 잘 사용하자!

문제 설명

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

제한 사항

n은 1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

nreturn
121144
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
    }