https://www.acmicpc.net/problem/2110
문제
정답 풀이
import sys
n,c = map(int,input().split())
house = []
for _ in range(n):
x = int(sys.stdin.readline())
house.append(x)
house.sort()
# 공유기 거리의 최소값
start = 1
# 공유기간의 가능한 최대 거리 = 가장 높은 거리와 가장 낮은 거리의 차이
end = house[-1] - house[0]
result = 0
while (start <= end):
mid = (start+end)//2 # 해당 gap(공유기간의 거리)
old = house[0]
count = 1
for i in range(1, len(house)):
if house[i] >= old+mid: # gap 이상
count+=1
old = house[i]
if count >=c:
start = mid + 1
result = mid
else:
end = mid - 1
print(result)
출처:https://assaeunji.github.io/python/2020-05-07-bj2110/https://claude-u.tistory.com/446
해설
적절한 조건을 만들 자신이 없어서 답부터 봤다.
자세한 설명이 링크에 있다.
근데 설명이 조금 이상하다.
아직 완전히 이해는 못했지만, 가능한 최대 거리를 찾아가는 이분 탐색 법이다.
말은 쉬운데, 참 대단;
정답 풀이
x
출처:
해석
'sw사관학교 정글 2기 > 02 이분탐색, 분할정복, 스택, 큐, 우선순위 큐' 카테고리의 다른 글
[스택] 백준 9012번 괄호 with Python3 (0) | 2021.08.13 |
---|---|
[이분탐색] 백준 2470번 두 용액 with Python3 ★★ (0) | 2021.08.13 |
[이분탐색] 백준 2805번 나무 자르기 with Python3 ★★ (0) | 2021.08.13 |
[이분탐색] 백준 1920번 수 찾기 with Python3 ★ (0) | 2021.08.13 |
[분할 정복] 백준 2630번 색종이 만들기 with Python3 ★★ (0) | 2021.08.13 |
댓글