백준 1629 문제 시간초 1등 기념 포스팅
2024. 8. 31. 17:29ㆍ알고리즘
let input = readLine()!.split(separator: " ").compactMap { Int($0) }
let a = input[0], b = input[1], c = input[2]
func solution(_ a: Int, _ b: Int, _ c: Int) -> Int {
if b == 1 {
return a
}
if !b.isMultiple(of: 2) {
return a * solution(a, b - 1, c)
}
let half = solution(a, b / 2, c) % c
return half * half % c
}
print(solution(a, b, c))
다른 문제와 다르게 연산 시간을 줄여준 비결은 isMultiple(of: )
에 있었다.
이런 소소한 즐거움이 계속 문제를 푸는 동력이 되었으면 좋겠다 ㅎㅎ
isMultiple(of: )
는 apple opensource에서 확인해 볼 수 있었다. 엣지 케이스를 필터링하는 점에서 차이가 나는 것 같은데..... 음..
@inlinable
public func isMultiple(of other: Self) -> Bool {
// Nothing but zero is a multiple of zero.
if other == 0 { return self == 0 }
// Special case to avoid overflow on .min / -1 for signed types.
if Self.isSigned && self == .min && other == -1 { return true }
// Having handled those special cases, this is safe.
return self % other == 0
}
'알고리즘' 카테고리의 다른 글
[백준] 7576 토마토 🍅 (0) | 2022.04.14 |
---|