728x90
https://www.acmicpc.net/problem/1654
- 생각
- 길이를 이분 탐색으로 찾기
- 처음에는 길이 합을 필요한 랜선의 개수로 나눈 그 숫자부터 찾으려고 했으나 시간초과를 우려해 이분탐색으로 바꿨다. 이전에 '나무 자르기' 문제를 푼 것이 많이 도움이 되었다.
- 길이를 이분 탐색으로 찾기
- 코드
input = stdin.readline
# 이미 가지고 있는 랜선의 개수, 필요한 랜선의 개수
K,N = map(int,input().split())
# 가지고 있는 랜선 길이
lines = []
for _ in range(K):
l = int(input())
lines.append(l)
# 이분 탐색
start = 1
end = max(lines)
while start <= end:
cnt = 0
mid = (start + end) // 2
# 랜선 자르기
for line in lines:
cnt += line // mid
# 잘린 랜선이 원하는 갯수보다 많다면 길이를 늘리기
if cnt >= N:
start = mid + 1
else:
end = mid - 1
print(end)
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[백준] 2110. 공유기 설치 - Python (0) | 2022.06.25 |
---|---|
[백준] 2579. 계단 오르기 - Python (0) | 2022.06.24 |
[프로그래머스] Lv. 2 메뉴 리뉴얼 (0) | 2022.06.23 |
[백준] 11047. 동전 0 - Python (0) | 2022.06.22 |
[백준] 11399. ATM - Python (0) | 2022.06.22 |
댓글