728x90
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
K, N = map(int, input().split())
N_list = [int(input()) for _ in range(K)]
result = 0
s, e = 1, max(N_list)
while s <= e:
m = (s + e) // 2
key = sum([num // m for num in N_list])
if key < N: # => m의 값이 큰경우 => m을 줄이는 방향
e = m - 1
else:
s = m + 1
result = max(result, m) # 랜선의 최대 길이를 찾아야 하므로
print(result)
이분탐색을 하면서 가장 큰 크기를 탐색하는 문제이다.
처음에 문제를 이해하기 힘들어서 이게 왜 이분 탐색이지 하는 생각이 들었다.
머리로는 이해는 가는데 뭔가 설명하긴 어려운 문제다...
s = 0로 초기화하면 zerodivisionError가 발생한다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1920 수찾기 python (0) | 2021.04.28 |
---|---|
[백준] 1874 스택수열 python (0) | 2021.04.28 |
[백준] 1504 특정한 최단 경로 python (0) | 2021.04.27 |
[백준] 1707 이분 그래프 python (0) | 2021.04.27 |
[백준] 2178 미로 탐색, python, C (0) | 2021.04.27 |