https://www.acmicpc.net/problem/2110
2110번: 공유기 설치
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가
www.acmicpc.net
이진탐색문제
문제의 keyPoint는 st와 ed를 어떻게 두냐에 따른것 같다(정확힌 mid값이 정의하는 것이 무엇이냐에 따름)
내 코드의 경우.. mid값은 임의의 사이거리를 의미하고,
사이거리에 맞춰 cnt 갯수를 가지며, 문제에서 주어진 c와 cnt의 크기를 비교하여 mid값을 조정하면 된다
n,c = list(map(int,input().split()))
arr = []
for _ in range(n):
arr.append(int(input()))
arr.sort()
st = 1
ed = arr[-1] - arr[0]
while st <= ed:
# mid는 임의의 사이거리
mid = (st + ed) //2
cnt = 1
router = arr[0]
for i in range(1,n):
#핵심
if arr[i] - router >= mid:
cnt+=1
router = arr[i]
if cnt >= c:
st = mid +1
l = mid
else:
ed = mid -1
print(l)
'Algorithm > baekjoon' 카테고리의 다른 글
| baekjoon 2869: 달팽이는 올라가고 싶다 (1) | 2022.08.20 |
|---|---|
| baekjoon 2839: 설탕 배달 (0) | 2022.08.11 |
| baekjoon 1654: 랜선 자르기 (0) | 2022.07.15 |
| baekjoon 6236: 용돈 관리 (1) | 2022.07.14 |
| baekjoon 2343: 기타 레슨 (0) | 2022.07.13 |
댓글