[나의 풀이]
function solution(n) {
let a = 0
for (let i=0; i**2 <= n; i++) {
if (i**2 === n) {
a = (i+1)**2
} else {
a = -1
}
}
return a
}
제곱이란 것이 주어진 숫자와 동일한 값으로 곱해진 것이기에 for문
을 사용하여 반복하도록 하였다. 다만 for문
의 반복 조건을 i**2 <= n
으로 주어 i가 제곱되었을 때 n과 같다면 반복을 멈추도록 하였다.
그 후는 if
의 조건에 i**2 === n
i의 제곱이 n과 같다면 i+1의 제곱을 하도록 작성하였다.
마지막으로 예외처리 되는 조건 n이 양의 정수 x의 제곱이 아니라면 -1을 리턴
의 경우 처음 if
에서 만약 n
이 3으로 주어졌을 때
1*1 === n // false
2*2 === n // false
3*3 === n // false
위와 같이 조건에 해당하지 않아 두번째 else
의 a = -1
로 결과가 나오게 된다.
이렇게 풀고 제출해보니 아래 이미지처럼 코드의 속도가 오래걸리는 부분들이 있었다.
테스트2, 테스트4, 테스트9 등이 그렇고 반대로 0.08ms, 0.05ms 등의 비교적 빠른 속도의 테스트도 있었는데 n으로 주어지는 숫자가 커질수록 for문이 오랫동안 돌기 때문에 그런거 같다.
이렇게 주어지는 n의 수가 커졌을 때도 코드가 빠르게 동작하도록 더 효율적인 코드를 고민 하도록 하자.