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끼리 나눗셈을 하면 "내림" 처리가 된다.

+ Recent posts