KEEP GOING

[python] 백준 1654번 : 랜선 자르기 (이진탐색) 본문

code review/binary search

[python] 백준 1654번 : 랜선 자르기 (이진탐색)

jmHan 2021. 11. 9. 09:55
반응형

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

 

1. 정답 

# 랜선 자르기
k, n = map(int, input().split())
lines = [int(input()) for _ in range(k)]
first = 1
last = max(lines)
res=0
while(first<=last):
    mid = (first+last)//2
    target = 0
    for line in lines:
        target += line//mid

    if target>=n:
        first = mid+1
        res=mid

    else:
        last = mid-1

print(res)

 

2. 강사님 풀이

# 랜선 자르기
def Count(len):
    cnt = 0
    for line in Line:
        cnt+=line//len
    return cnt
    
k, n = map(int, input().split())
Line=[]
res=0
largest = 0
for _ in range(k):
    tmp = int(input())
    Line.append(tmp)
    #max함수 사용
    largest = max(largest, tmp)
lt=1
rt=largest
while(lt<=rt):
    mid = (lt+rt)//2
    if Count(mid)>=n:
        lt = mid+1
        res=mid

    else:
        rt = mid-1

print(res)
반응형
Comments