티스토리 뷰
728x90
https://www.acmicpc.net/problem/1654
- 해설 :
K개의 랜선 길이가 주어지고, 이 K개의 랜선을 동일한 길이로 잘라 N개의 랜선을 만들려 한다.
이 때 자를 수 있는 랜선의 최대 길이를 찾는 문제이다.
- 풀이 :
이분탐색으로 쉽게 해결할 수 있는 문제이다. start는 0, end는 랜선의 길이들 중 최댓값으로 설정하고
각 탐색마다 자른 랜선의 개수가 K개보다 작으면 길이를 줄이고, 크거나 같다면 길이를 늘려 최종적으로 최댓값을 찾으면 된다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import sys
input = sys.stdin.readline
k,n = map(int,input().split())
l = [int(input().strip()) for _ in range(k)]
i = 1
j = max(l)
while i <= j:
mid = (i+j)//2
cnt = sum([key // mid for key in l])
if cnt >= n:
i = mid + 1
ans = mid
elif cnt < n:
j = mid - 1
print(ans)
|
cs |
320x100
'Algorithm > Binary Search' 카테고리의 다른 글
(Python/파이썬) - 백준(BOJ) 7795번 : 먹을 것인가 먹힐 것인가 (0) | 2022.04.06 |
---|---|
(Python) - BOJ(1072번) : 게임 (0) | 2022.02.21 |
(Python) - BOJ(2805번) : 나무 자르기 (0) | 2022.02.01 |
(Python) - BOJ(1920번) : 수 찾기 (0) | 2022.01.28 |
(Python) - 프로그래머스 : 입국심사 (0) | 2022.01.18 |
댓글
© 2022 WonSeok, All rights reserved