[백준] 1477(파이썬) - 휴게소 세우기
resilient
·2021. 8. 1. 12:01
728x90
반응형
https://www.acmicpc.net/problem/1477
1477번: 휴게소 세우기
첫째 줄에 현재 휴게소의 개수 N, 더 지으려고 하는 휴게소의 개수 M, 고속도로의 길이 L이 주어진다. N은 100보다 작거나 같으며, M도 100보다 작거나 같다. L은 100보다 크거나 같고, 1000보다 작거나
www.acmicpc.net
- 이 문제를 읽고 처음 든 생각은 이분 탐색으로 풀어야겠다 였다.
- 처음에는 입력받은 휴게소위치에 0과 l 값을 넣어줘서 각각 휴게소 사이의 거리들을 구해서 오름차순 정렬한 뒤,
각각 거리들의 차 만큼과 이분 탐색한 값을 비교해주면서 구현하였다. - 이분 탐색으로 풀어야 하는데 카운트를 어떻게 할지가 문제였는데, 거리에 맞게 지어야 하므로 거리를 mid 값으로 나눈 값을 카운트해서 m개가 되면 그 mid값이 처음 나왔을 때가 최대이면서 최소인 값이라고 생각했다.
import sys
input = sys.stdin.readline
n,m,l = map(int,input().split())
data = list(map(int,input().split()))
data.append(0)
data.append(l-1)
data.sort()
start = 0
end = data[-1]
while start <= end:
cnt = 0
mid = (start+end) // 2
for i in range(1,len(data)):
if (data[i]-data[i-1]) > mid:
# 이 부분이 이문제에서 핵심인 부분!
cnt += (data[i]-data[i-1] - 1)//mid
if cnt > m:
start = mid + 1
else:
end = mid - 1
answer = mid
print(answer)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
[백준] 2096(파이썬) - 내려가기 (0) | 2021.08.03 |
---|---|
[백준] 6118(파이썬) - 숨바꼭질 (0) | 2021.08.02 |
[백준] 1182(파이썬) - 부분수열의 합 (0) | 2021.07.31 |
[백준] 16926(파이썬) - 배열 돌리기 1 (0) | 2021.07.28 |
[백준] 16198(파이썬) - 에너지 모으기 (0) | 2021.07.27 |