링크: https://www.acmicpc.net/problem/1654
2805번 나무 자르기와 거의 비슷하게 이분탐색으로 풀었습니다.
start = 1로 하는 것을 주의해주시면 됩니다. 0으로 하면 0으로 나누는 바람에 런타임 에러가 발생합니다.
import Foundation
let arr = readLine()!.split(separator: " ").map { Int(String($0))! }
let N = arr[0]
let M = arr[1]
var lans = [Int]()
for _ in 0..<N {
lans.append(Int(readLine()!)!)
}
var length = 0
var start = 1
var end = lans.max()! // // 가장 긴 경우
while start <= end {
let mid = (start + end) / 2 // 최대 길이
var count = 0
for lan in lans {
count += lan / mid // 자른 갯수만큼 더하기
}
if count >= M {
start = mid + 1
length = max(length, mid)
} else {
end = mid - 1
}
}
print(length)
'알고리즘' 카테고리의 다른 글
[Swift] 프로그래머스 - 타겟 넘버 (0) | 2022.03.17 |
---|---|
2022 SK ICT 1차 코딩테스트 후기 (0) | 2022.03.17 |
[Swift] 백준 2805번 나무 자르기 (0) | 2022.03.17 |
[Swift] 프로그래머스 - 카카오 길 찾기 게임 (0) | 2022.03.04 |
[Swift] 프로그래머스 - 카카오 캐시 (0) | 2022.02.28 |
댓글