Skip to content

[Algorithm] MinMaxDivisionย #152

@hwangJi-dev

Description

@hwangJi-dev

๐Ÿ’ฌย ๋ฌธ์ œ

https://app.codility.com/programmers/lessons/14-binary_search_algorithm/min_max_division/


๐Ÿ’ฌย Idea

  • ์ด๋ถ„ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ถ„ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‘์šฉํ•ด ํ•ด๋‹น ๋ฌธ์ œ์— ์ ์šฉ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋งŽ์ด ์–ด๋ ค์› ๋‹ค. ์•ž์œผ๋กœ ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค!

๐Ÿ’ฌย ํ’€์ด

public func solution(K : Int, M : Int, A : inout [Int]) -> Int {
    var low = A.max()!
    var high = A.reduce(0, +)
    
    if K == 1 { return high }
    if K >= A.count { return low }
    
    while low <= high {
        let mid = (low + high) / 2
        
        if isValid(A: A, maxBlockCount: K, maxBlockSize: mid) {
            high = mid - 1
        } else {
            low = mid + 1
        }
    }

    return low
}

func isValid(A: [Int], maxBlockCount: Int, maxBlockSize: Int) -> Bool {
    var blockSum = 0
    var blockCount = 0
    
    for a in A {
        if blockSum + a > maxBlockSize {
            blockSum = a
            blockCount += 1
        } else {
            blockSum += a
        }
        
        if blockCount >= maxBlockCount {
            return false
        }
    }
    
    return true
}

**์†Œ์š”์‹œ๊ฐ„** : 73๋ถ„

์‹œ๊ฐ„ ๋ณต์žก๋„ : O(Nlog(N+M))*

ํ‰๊ฐ€ํ‘œ : https://app.codility.com/demo/results/trainingW3HGHY-P47/

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions