[코딜리티] 레슨 5 - CountDiv (Swift)

devapploper·2024년 8월 12일

풀이 1

public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
    var largestDivisibleNumber = -1, smallestDivisibleNumber = -1
    
    for i in stride(from: A, through: B, by: 1) where i % K == 0 {
        smallestDivisibleNumber = i
        break
    }

    for i in stride(from: B, through: A, by: -1) where i % K == 0 {
        largestDivisibleNumber = i
        break
    }

    guard largestDivisibleNumber != -1 && smallestDivisibleNumber != -1 else {
        return 0
    }

    return (largestDivisibleNumber - smallestDivisibleNumber) / K + 1
}

A에서 B까지 K로 나누어 0으로 떨어지는 가장 큰 수와 가장 작은 수를 찾는다.
큰 수에서 작은 수를 뺀 값을 K로 나누고 1을 더한 값이 A부터 B까지 K로 나눴을 때 나머지가 0인 숫자의 갯수가 된다.
만약 K로 나누어 떨어지는 가장 큰 수 와 작은 수를 찾지 못한 경우 예외처리가 필요하다.

풀이 2

public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
    let bCount = B/K
    let aCount = A/K
    let result = bCount - aCount
    return A % K == 0 ? result + 1 : result
}

A와 B를 각각 K로 나눈 후 두 값의 차이는 A와 B사이의 K로 나누어 떨어지는 수의 개수와 같다. 단, A가 K로 나누어 떨어지는 경우 이 숫자를 범위에 포함해야하기 때문에 결과값에 1을 더하여 반환한다.

profile
iOS, 알고리즘, 컴퓨터공학에 관련 포스트를 정리해봅니다

0개의 댓글