CountDiv coding task - Learn to Code - Codility
접근 방법
A...B 범위의 배열 안에서, K로 나누어 떨어지는 원소의 개수를 return
A...B의 범위가 최대 20억이므로, O(N)보다 효율적인 알고리즘이 필요함
의사 코드
정수론으로 접근하자면 B를 K로 나눈 값이 max / A를 K로 나눈 값이 min
max - min에서 약간 조정하면 되지 않을까?
A가 K로 나누어 떨어지는 경우: 값 - 1
아닌 경우: 값
나의 풀이
import Foundation
import Glibc
public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
let maxValue = B / K
let minValue = A % K == 0 ? (A / K - 1) : (A / K)
return maxValue - minValue
}
후기
범위에 B를 포함해야 하나? 싶어서 조금 시간이 걸렸다.
문제 자체는 medium 난도도 아니고, prefixSum 카테고리도 아닌 듯하다.
Swift에서 Int끼리 나눗셈을 하면 "내림" 처리가 된다.
'Dev > PS' 카테고리의 다른 글
| [Swift 알고리즘] MinAvgTwoSlice - Codility (1) | 2024.02.05 |
|---|---|
| [Swift 알고리즘] GenomicRangeQuery - Codility (1) | 2024.02.04 |
| [Swift 알고리즘] 네트워크 - 프로그래머스 (0) | 2024.02.01 |
| [Swift 알고리즘] 타겟 넘버 - 프로그래머스 (1) | 2024.02.01 |
| [Swift 알고리즘] 수열 2259 - 백준 (1) | 2024.01.31 |