728x90
반응형
문제 링크
https://www.acmicpc.net/problem/1477문제 요약
다솜이는 현재 N개의 휴게소를 가진 고속도로에서 M개의 새로운 휴게소를 더 세우려고 합니다. 목표는 휴게소가 없는 구간의 길이의 최댓값을 최소화하는 것입니다.
- 휴게소는 고속도로의 시작과 끝에는 세울 수 없고, 기존 휴게소가 있는 곳에도 새로 세울 수 없습니다.
- 휴게소는 정수 위치에만 세울 수 있습니다.
- N개의 기존 휴게소와 M개의 새로운 휴게소가 주어질 때, 휴게소가 없는 구간의 최댓값을 최소화했을 때의 값을 구하는 문제입니다.
푼 방법
- 휴게소 간 구간 길이를 계산하고, 해당 구간에 새로운 휴게소를 배치합니다.
- 이진 탐색을 통해 휴게소가 없는 구간의 최댓값을 최소화하는 값을 찾습니다.
정답 코드
import sys
n, m, l = map(int, sys.stdin.readline().split())
hue = list(map(int, sys.stdin.readline().split()))
hue.sort()
dist = []
if n>0:
for i in range(n+1):
if i==0:
dist.append(hue[0])
elif i==n:
dist.append(l-hue[-1])
else:
dist.append(hue[i] - hue[i-1])
else:
dist.append(l)
def chk(mid):
tmp = 0
for i in range(len(dist)):
tmp += (dist[i]-1)//mid
return tmp <= m
s = 1
e = l
while s<=e:
mid = (s+e)//2
if chk(mid):
e = mid-1
else:
s = mid+1
print(s)
배웠던 부분
- 이전에 풀었던 케이크 자르기와 유사한 이분탐색 문제임.
- 답을 제출하고 다른 사람들의 풀이를 보니 우선순위큐로 해결한 케이스도 있음
- 매순간 가장 큰 경우를 큐에서 얻고 다음 요소보다 작아질 때 까지 나누는 수를 증가시키며 나눔
- 나누는 수가 m이 될 때 까지 반복
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 28325 - 호숫가의 개미 (1) | 2024.10.12 |
---|---|
[백준] 14569 - 시간표 짜기 (5) | 2024.10.09 |
[백준] 17179 - 케이크 자르기 (1) | 2024.10.06 |
[백준] 20928 걷는 건 귀찮아 (2) | 2024.09.16 |
[백준] 11509 - 풍선 맞추기 (1) | 2024.09.16 |