2343号:その他のレッスン-Swift


https://www.acmicpc.net/problem/2343
難易度銀1🥈
アルゴリズム分類:二分ナビゲーション
🧐 質問へのアクセス
この問題は、Blu-rayのサイズを中間値として二分探索すると解決できます.
しかし、初めてlow=0、high=arr.reduce(0、+)に設定されたため、エラーが発生し続けた.
lowは最長のレッスンを含まなければならないのでarr.max()!に設定する必要があります.
完全なコード
//2343번 기타 레슨

let t = readLine()!.split(separator: " ").map{Int(String($0))!}
let (n,m) = (t[0],t[1])
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}

func binarySearch() {
    var low = arr.max()!, high = arr.reduce(0, +)
    while low < high {
        let mid = (low+high)/2
        var cnt = 1
        var sum = 0

        for v in arr {
            if sum + v > mid {
                cnt += 1
                sum = v
            } else {
                sum += v
            }
        }
        
        if cnt <= m {
            high = mid
        } else {
            low = mid + 1
        }
    }
    print(high)
}

binarySearch()
一行の評価:これは簡単な問題ですが、もっと考えてから答えられると思います.