๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold4] 2110๋ฒˆ_๊ณต์œ ๊ธฐ ์„ค์น˜

Dbswnstjd 2023. 2. 21. 23:40

๋ฌธ์ œ

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

ํ’€์ด

# ๋ฐฑ์ค€ 2110๋ฒˆ ๋ฌธ์ œ - ๊ณต์œ ๊ธฐ ์„ค์น˜
import sys 
input = sys.stdin.readline
n, c = map(int, input().split())
x = []
for i in range(n):
    x.append(int(input()))
x.sort()

def binary_search(x, start, end):
    while start <= end:
        mid = (start+end) // 2
        cur = x[0]
        cnt = 1

        for i in range(1, len(x)):
            if x[i] >= cur + mid:
                cnt += 1
                cur = x[i]
        
        if cnt >= c:
            global answer
            start = mid + 1
            answer = mid
        else:
            end = mid - 1

start = 1
end = x[-1] - x[0]
answer = 0

binary_search(x, start, end)
print(answer)

์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ sys๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด Python3 ์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.