반응형

   문제

   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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기