-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
๐ฌย ๋ฌธ์
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/