728x90
<문제 링크>
https://www.acmicpc.net/problem/2110
<문제 풀이>
1. 처음 최소 거리는 항상 1, 최대 거리는 max-min
2. mid 거리만큼 차례대로 공유기를 설치함. (집이 1,4,8,9이고, mid가 4일 때, 1,8에 공유기 설치 가능)
3. 2개밖에 설치 못하므로 거리-1, 그 반대면 +1
<코드>
#이취코 답
n,c = list(map(int,input().split()))
array = []
for _ in range(n):
array.append(int(input()))
array.sort()
start = 1
end = array[-1]-array[0]
result = 0
while start<=end:
mid = (start+end)//2
value = array[0]
count = 1
for i in range(1,n):
if array[i] >= value+mid:
value = array[i]
count += 1
if count >= c:
start = mid+1
result = mid
else:
end = mid-1
print(result)
<고쳐야 할 점>
- 최적의 결과 저장하는 법 기억!!
- 문제 자체 이해하기,,,
- 복습 알고리즘
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[동적계획법] 백준 14501번 '퇴사' (Python) (0) | 2022.03.30 |
---|---|
[동적계획법] 난이도2, 이취코 226p '효율적인 화폐 구성' (Python) (0) | 2022.03.30 |
[정렬] 백준 1715번 '카드 정렬하기' (Python) (0) | 2022.03.29 |
[BFS/DFS] 백준 16234번 '인구 이동' (Python) (0) | 2022.03.29 |
[BFS/DFS] 백준 14888번 '연산자 끼워넣기' (Python) (0) | 2022.03.28 |