truncatingRemainder(dividingBy:)
스위프트에서 나머지 연산을 하는 방법으로 보통은 나머지 연산자 '%'를 사용해서 연산을 한다.
프로그래머스에서 코테 문제를 풀고 있던 와중 나머지 연산을 해야 하는 상황이 생겨 나머지 연산자를 사용해 연산을 했다.
하지만 나머지 연산자 부분에서 계속해 오류가 발생했다. 아래는 오류 코드이다.
import Foundation
func solution(_ n:Int64) -> Int64 {
var result:Int64 = 0
var a:Double = sqrt(Double(n))
if a % 1 != 0.0{ // <- 오류 발생
result = -1
}else {
let num = Int(a) + 1
result = Int64(num * num)
}
return result
}
이 문제를 해결하기 위해 구글에 검색을 했더니 truncatingRemainder 라는 것을 알게 되었다.
알고보니 '%' 연산자를 이용해 나머지 연산을 할 경우에는 정수 타입에만 가능하고 소수점이 있는 실수 타입에서는 truncationRemainder 함수를 사용해야 했다.
아래 코드는 위에서 알게된 함수를 나머지 연산 함수를 사용해 수정한 코드이다.
import Foundation
func solution(_ n:Int64) -> Int64 {
var result:Int64 = 0
var a:Double = sqrt(Double(n))
if a.truncatingRemainder(dividingBy: 1.0) != 0.0{
result = -1
}else {
let num = Int(a) + 1
result = Int64(num * num)
}
return result
}
위 처럼 수정하여 다시 제출을 하니 맞다고 나왔다. 실수를 계산하는 경우와 정수를 계산 하는 경우 모두 따로 신경을 써야 한 다는것을 알게 되었고 이러한 경우가 다시 나와도 당황하지 않고 풀 수 있을 것 같다.
'TIL(Today I Learned)' 카테고리의 다른 글
| 2024.04.17 Today I Learned (1) | 2024.04.17 |
|---|---|
| 2024.04.16 Today I Learned (1) | 2024.04.16 |
| 2024.04.15 Today I Learned (0) | 2024.04.15 |
| 2024.04.09 Today I Learned (1) | 2024.04.09 |
| 2024.04.08 Today I Learned (2) | 2024.04.08 |