링크: https://www.acmicpc.net/problem/1654
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
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 |
댓글