728x90
반응형
✏️ 문제
https://www.acmicpc.net/problem/1654
✏️ 풀이
이진탐색을 이용하는 문제다. 이진탐색에 대한 내용은 여기에서
랜선의 길이에 대해서 이진탐색을 시행한다.
k,n= map(int, input().split())
line = []
for _ in range(k):
line.append(int(input()))
start = 1
end = max(line)
while(start<=end):
mid = (start+end)//2
cnt=sum([x//mid for x in line])
if cnt>=n:
start=mid+1 # 자른개수가 많으면 더 크게 잘라야함
else:
end=mid-1
print(end)
- k(가진 랜선 개수), n(필요한 랜선개수) 입력받기
- 가진 랜선의 길이를 입력받아 리스트에 저장
- 랜선길이가 최소 1은 되어야하니 start=1, 최대길이는 가지고 있는 랜선중 가장 긴 길이를 최대길이로 설정
- while(start<=end):
- 이진탐색을 위해 중간값((최소랜선길이+최대랜선길이)//2) 선언
- 중간값으로 가진 가지고 있는 랜선들을 다 잘라보고 랜선이 몇개생기는지 카운트한다.
- 만약 만들어야하는 랜선과 같거나 더 많은 양이 만들어 졌다면 최소랜선길이는 그 중간값+1이 된다.
- 하지만 반대로 양이 부족하다면 랜선의 최대길이는 그 중간값보다 작아야한다.
- 이를 start<=end인 지점까지 반복하다가 반복문을 벗어나면 최대길이 end를 출력한다.
728x90
반응형
'프로그래밍 > 백준' 카테고리의 다른 글
백준 11286: 절댓값 힙 해설- python (0) | 2022.02.06 |
---|---|
백준 11000: 강의실 배정 해설 - python (0) | 2022.02.05 |
백준 10816: 숫자카드 2 해설- python (0) | 2022.02.01 |
백준 10815: 숫자카드 해설- python (0) | 2022.02.01 |
백준 11053: 가장 긴 증가하는 부분 수열 해설- python (0) | 2022.01.31 |