๐ก solutions
๐ฌ ์ด๋ถํ์ ์ด์ฉํ์ฌ ๋ฌธ์ ํด๊ฒฐ
๐ฌ start, end, mid ๋ณ์๊ฐ๋ค์ ๊ณต์ ๊ธฐ ์ฌ์ด ๊ฑฐ๋ฆฌ๋ก ์ ํ๋ค.
๐ฌ start๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ์ต์ ๊ฑฐ๋ฆฌ๋ก, end๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ์ต๋ ๊ฑฐ๋ฆฌ๋ก ์ก๊ณ ์ด๋ถ ํ์์ ์์ํ๋ค.
๐ฌ ์ง์ ์ขํ๋ฅผ ๋ด์ house ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ํ ๋งจ ์ฒซ ๋ฒ์งธ ์ง๋ถํฐ ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ๋๋ฐ ์ด๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ mid๋งํผ ์ก๋๋ค.
๐ฌ ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ ํ์๋ฅผ ๋ํ๋ด๋ count๊ฐ ์ฃผ์ด์ง ๊ณต์ ๊ธฐ ๊ฐ์ C ์ด์์ด๋ฉด ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๊ณ (์ด๋ ๊ณต์ ๊ธฐ ์ฌ์ด ์ต๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ answer๊ฐ์ mid๋ก ๊ฐฑ์ ), C ๋ฏธ๋ง์ด๋ฉด ๊ฑฐ๋ฆฌ๋ฅผ ์ขํ๋ค.
๐จ๐ป code
import sys
def binary_search(start, end):
answer = 0
while start <= end:
mid = (start + end) // 2
current = house[0]
count = 1
for i in range(1, len(house)):
if house[i] >= current + mid:
current = house[i]
count += 1
if count >= C:
# ์ฌ์ด ๊ฑฐ๋ฆฌ ๋ํ๊ธฐ
start = mid + 1
answer = mid
else:
# ์ฌ์ด ๊ฑฐ๋ฆฌ ์ขํ๊ธฐ
end = mid - 1
return answer
input = sys.stdin.readline
N, C = map(int, input().split())
house = [int(input()) for _ in range(N)]
house.sort()
# start๋ ์ต์๊ฑฐ๋ฆฌ, end๋ ์ต๋๊ฑฐ๋ฆฌ
start = 1
end = house[-1] - house[0]
print(binary_search(start, end))
๐ problem
๋ฌธ์
๋ํ์ด์ ์ง N๊ฐ๊ฐ ์์ง์ ์์ ์๋ค. ๊ฐ๊ฐ์ ์ง์ ์ขํ๋ x1, ..., xN์ด๊ณ , ์ง ์ฌ๋ฌ๊ฐ๊ฐ ๊ฐ์ ์ขํ๋ฅผ ๊ฐ์ง๋ ์ผ์ ์๋ค.
๋ํ์ด๋ ์ธ์ ์ด๋์๋ ์์ดํ์ด๋ฅผ ์ฆ๊ธฐ๊ธฐ ์ํด์ ์ง์ ๊ณต์ ๊ธฐ C๊ฐ๋ฅผ ์ค์นํ๋ ค๊ณ ํ๋ค. ์ต๋ํ ๋ง์ ๊ณณ์์ ์์ดํ์ด๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์, ํ ์ง์๋ ๊ณต์ ๊ธฐ๋ฅผ ํ๋๋ง ์ค์นํ ์ ์๊ณ , ๊ฐ์ฅ ์ธ์ ํ ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ ํฌ๊ฒ ํ์ฌ ์ค์นํ๋ ค๊ณ ํ๋ค.
C๊ฐ์ ๊ณต์ ๊ธฐ๋ฅผ N๊ฐ์ ์ง์ ์ ๋นํ ์ค์นํด์, ๊ฐ์ฅ ์ธ์ ํ ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ต๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง์ ๊ฐ์ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์ ๊ธฐ์ ๊ฐ์ C (2 ≤ C ≤ N)์ด ํ๋ ์ด์์ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ง์ ์ขํ๋ฅผ ๋ํ๋ด๋ xi (0 ≤ xi ≤ 1,000,000,000)๊ฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฐ์ฅ ์ธ์ ํ ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ์ต๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค.