1654 랜선 자르기

Choong Won, Seo·2021년 12월 23일
0

백준

목록 보기
4/30
post-thumbnail

Today 12/23

랜선 자르기 (My Code)

let KN = readLine()!.split(separator: " ").map{Int(String($0))!}
var lanArr = [Int]()
for _ in 1...KN[0] {
    let input = Int(readLine()!)!
    lanArr.append(input)
}

var min = 1
var max = lanArr.max()!
var output = 0

while min <= max {
    let mid = (min + max) / 2
    var count = 0
    for lan in lanArr {
        count += lan / mid
    }
    if count < KN[1] {
        max = mid-1
    } else {
        min = mid+1
        output = mid
    }
}
print(output)

이분탐색으로 풀 수 있는 문제이다. 이분탐색을 이용한다는 점을 처음에 찾지 못해서 구글링의 도움을 받았다.

그 다음부터는 그냥 구현하면 되는 부분이라서 쉬웠고, 알던 사실들도 다시 한 번 정리했다.

while min <= max로 while문을 돌린다는 점

for lan in lanArr로 반복문을 간결하게 사용

보통은 클 때, 작을 때, 같을 때 3가지로 나눠서 조건문을 사용하는데, 이 문제의 경우에는 더 커도 된다는 조건이 들어가 있으므로 클 때랑 같을 때를 묶어서 반복문의 끝까지 돌려준다.

profile
UXUI Design Based IOS Developer

0개의 댓글