반응형

문제

https://www.acmicpc.net/problem/2110


두 공유기 사이의 거리를 기준으로 이분탐색을 시행한다.

두공유기의 거리를 임의로 정하고 집의 좌표를 정렬한후 각 거리만큼 더해가며 집사이

의 거리가 임의의 거리보다 크다면 공유기를 설치해준다.

이렇게 설치를 하고 공유기의 설치수가 원하는 공유기의 개수보다 많거나 같다면 거리를

늘려서 다시 탐색하고 공유기수가 작개 나온다면 거리를 줄여서 다시 계산한다. 

처음 짠 코드가 오래걸려서 입출력을 바꾸었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sys
input=sys.stdin.readline
N,C=map(int,input().split())
c_list=[]
for i in range(N):
    c_list.append(int(input()))
 
c_list.sort()
 
 
min_degree=1
max_degree=c_list[-1]
result=0
while min_degree<=max_degree:
    mid=(max_degree+min_degree)//2
 
    sum_c=1#공유기 갯수 첫지점은 넣고 시작
    tmp=c_list[0]#이전집 저장
    for i in range(1,N):
        if tmp+mid<=c_list[i]:#mid보다 멀리있으면 공유기 설치
            sum_c+=1
            tmp=c_list[i]
            if sum_c>=C:#더많이 설치되었거나 같다면 더이상
                break
 
    if sum_c>=C:#공유기 설치수가 원하는 설치수보다 많거나 같다면 거리를 늘린다.
        min_degree=mid+1
        result=mid
    else:
        max_degree=mid-1
 
print(result)
 

cs





반응형

'알고리즘(python) > 탐색' 카테고리의 다른 글

[Python]이분탐색 백준 12015  (0) 2020.02.01
[Python]이분탐색 백준 1300  (2) 2020.02.01
[Python]이분탐색 백준 2805  (0) 2020.01.31
[Python]이분탐색 백준 1654  (0) 2020.01.31
[Python]이분탐색 백준 10816  (0) 2020.01.31
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기