[프로그래머스] 정수 제곱근 판별

김태영·2022년 5월 19일
0

[JavaScript] Coding test

목록 보기
10/11
post-thumbnail

문제 자세히 보기



[나의 풀이]

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

위와 같이 조건에 해당하지 않아 두번째 elsea = -1로 결과가 나오게 된다.

이렇게 풀고 제출해보니 아래 이미지처럼 코드의 속도가 오래걸리는 부분들이 있었다.

테스트2, 테스트4, 테스트9 등이 그렇고 반대로 0.08ms, 0.05ms 등의 비교적 빠른 속도의 테스트도 있었는데 n으로 주어지는 숫자가 커질수록 for문이 오랫동안 돌기 때문에 그런거 같다.

이렇게 주어지는 n의 수가 커졌을 때도 코드가 빠르게 동작하도록 더 효율적인 코드를 고민 하도록 하자.

profile
즐거운 개발을 위해~

0개의 댓글