포스트

179. 정수 제곱근 판별

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import Foundation

func solution(_ n:Int64) -> Int64 {
    
    var N : Double = 0
    var answer : Int64 = 0
    
    N = Double(n)
    
    if n >= 1 && n <= 50000000000000 {
        
        if pow(sqrt(N),2.0) ==  N {
            
            answer = Int64(pow(sqrt(N)+1.0, 2.0))
            
        } else {
            
            answer = -1
        }
        
        
    } else {
        
        return 0
        
    }
    
    return answer
}

이렇게 생각한 이유. 처음에는 어떻게 할지 몰라서 계속 생가하다가 결구 구글링을 하게 되었다, 다른사람의 코드를 직접적으로 본것은 아니지만, 해당글을 통해 아이디어를 얻었고 위와 같이 코드를 작성하였다.

하지만 101이이라는 예외의 수가 존재하였고, 제출하였으나 오답이 되었다. 그래서 print를 통해 그 답을 찍어보니 101의 경우 -1이 나와야 했으나, 122이라는 엉뚱한 답이 도출이 되었다.

그래서 해당부분을 바꾸기위해 int로 돌리려고 하였으나 pow가 지원하는 데이터형식에 맞지 않았다.

그래서 해당부분에대해 고전을 하였다.

그러다가 이것저것 자료를 더 찾아봐야겠다 싶어서 swift의 소수점에 관한 내용을 찾아보았다.


Swift에서의 소수점 다루기.

  1. 반올림(round) 예시
    1
    2
    
    round(5.55) // 6.0
    round(5.3) // 5.0
    
  2. 올림(ceil) 예시
    1
    2
    
    ceil(5.55) // 6.0
    ceil(5.4) // 6.0
    
  3. 내림(floor) 예시
    1
    2
    3
    4
    
    floor(5.4) // 5.0
    floor(5.55) // 5.0
    floor(-3.44) // -4.0
    floor(-3.677) // -4.0
    
  4. 버림(trunc) 예시
    1
    2
    3
    4
    
    trunc(5.6) // 5.0
    trunc(5.3) // 5.0
    trunc(-3.44) // -3.0
    trucn(-3.66) // -3.0
    

수정한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import Foundation

func solution(_ n:Int64) -> Int64 {
    
    var N : Double = 0
    var answer : Int64 = 0
    
    N = Double(n)
    
    if n >= 1 && n <= 50000000000000 {
        
        if pow(floor(sqrt(N)),2.0) ==  N {
            
            answer = Int64(pow(sqrt(N)+1.0, 2.0))
            
        } else {
            
            answer = -1
        }
        
        
    } else {
        
        return 0
        
    }
    
    return answer
}

연산과 관련된 것도 정리해야겠다는 생각이든다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.