IOS/Swift Algorithm Level 1

Swift. 정수 제곱근 판별

 문제.

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

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

 풀이.

    // 인상깊은 풀이
func solution(_ n:Int64) -> Int64 {
    let x = Int64(sqrt(Double(n)))
    return (x * x == n) ? ((x + 1) * (x + 1)) : -1
}

   // 나의풀이
func solution(_ n:Int64) -> Int64 {
    let x: Int = 1
    while x*x == n {
        if x*x == n {
            return Int64((x+1)*(x+1))
        }
    }
    return -1
}

요구사항. 

1. 일단 문제를 딱 보고나서 생각한것은 어차피 제곱근이니까 조건은 간단할꺼고 어떤 메서드같은게 있나 생각해 보는 것이였다. 

2. 풀고나니 바로 보인것은 인상깊은 풀이였고, 이해가 되지 않았던 점은 Double을 꼭 써야 되나? 했는데 플레이 그라운드에 옮기자마자 오류가 뜨는 것을 보고 저렇게 해야 되는구나를 알았다. 

3. sqrt. 기억해 두자.