반응형
문제
https://www.acmicpc.net/problem/1654
길이를 기준으로 생각해야한다.
길이에 따라 나오는 랜선의 갯수가 N보다 많은것중에 가장 긴것을 구하기 위해선 가능한
랜선의 범위를 정하고 이분탐색을 통해 그 범위를 좁혀나가면 된다.
길이의 후보군은 1~가장긴랜선이 될것이다.
그 중간값을 기준으로 랜선들을 잘랐을때 N개 이상의 랜선이 나온다면 랜선의 길이를
늘리고 N개가 나오지 않는다면 줄여야한다. 여기서 랜선의 길이를 이분법을 통해 늘리고
줄여주면된다.코드를 보면 이해가 빠를것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import sys K,N=map(int,sys.stdin.readline().split()) lanline=[] for i in range(K):#영식이가 들고있는 전선들 lanline.append(int(sys.stdin.readline())) min_value=1 max_value=max(lanline) result=0 while min_value<=max_value: mid = (min_value + max_value) // 2 lan_count=0 for i in range(K): lan_count+=lanline[i]//mid if lan_count>=N:#원하는 랜선의 갯수보다 많이나왔으면 길이를 늘려야됨 min_value=mid+1 result = mid#길이저장 elif lan_count<N: max_value=mid-1 print(result) | cs |
반응형
'알고리즘(python) > 탐색' 카테고리의 다른 글
[Python]이분탐색 백준 2110 (0) | 2020.02.01 |
---|---|
[Python]이분탐색 백준 2805 (0) | 2020.01.31 |
[Python]이분탐색 백준 10816 (0) | 2020.01.31 |
[Python]이분탐색 백준 1920 (0) | 2020.01.31 |
[Python]백트래킹 백준 14889 (0) | 2020.01.07 |
최근댓글