본문 바로가기
Algorithm/baekjoon

baekjoon 2110: 공유기 설치

by 갈잃자 2022. 7. 19.

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

댓글