처음에는 n을 root한 값을 num(Double형)이라고 했을 때

num * num이 n과 같은지 비교해서 같으면 num + 1을 제곱해서 리턴하고 아니면 -1을 리턴하게끔 코드를 짜고 돌렸으나 3 가지 테스트케이스에서 fail이 뜨길래 다른 방식으로 시도해서 통과했다.

어떻게 통과했냐면 일단 sqrt한 값을 double 한다면 제곱근이 없는 숫자인 경우 무조건 소수점 이하의 수가 남을 수밖에 없기 때문에

Double(n)의 squareRoot() 에서 Double(n)의 floor() 값을 뺀 값이 0보다 큰지 확인하는 것이다.

생각해보라. 제곱근이 있는데 소수점 이하값이 0보다 클리가 없지 않은가.

정답코드: 

import Foundation 
func solution(_ n:Int64) -> Int64 {
    var num = Double(n).squareRoot()
    if num - floor(num) > 0 {
        return -1
    } else {
        num = num + 1
        return Int64(num * num)
    }
}

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">