๋ฐ์ํ
๐ค๋ฌธ์ ํด๊ฒฐ
-
S2 | ์ด๋ถํ์
ํน์ ๋ฒ์ ์์์ ๊ฐ์๋ฅผ ์ ํ๋ค? => ์ด๋ถ ํ์
- ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ ์ ์๋ ์ต์๊ฐ๊ฒฉ๊ณผ ์ต๋๊ฐ๊ฒฉ์ ์ค๊ฐ๊ฐ๋ถํฐ ์์
- ์ค๊ฐ๊ฐ(๊ณต์ ๊ธฐ ์ค์น ๊ฐ๊ฒฉ)์ผ๋ก ๊ณต์ ๊ธฐ๋ฅผ ์ค์น ํ์ ๋
- ์ค์นํ ๊ณต์ ๊ธฐ๊ฐ ๋ถ์กฑํ๋ฉด ์ค์น ๊ฐ๊ฒฉ์ ์ขํ์ ๋ ๋ง์ด ์ค์นํ์
- ์ค์นํ ๊ณต์ ๊ธฐ๊ฐ ๋ง๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ค์นํ ๊ฐ๊ฒฉ์ ๋๋ ค์ ๋ ์ค์นํ๊ฑฐ๋ ์ต๋๋ก ๊ฐ๊ฒฉ์ ๋๋ ค๋ณด์
๐ป์์ค ์ฝ๋
import sys
N, C = map(int, input().split())
house = [int(sys.stdin.readline()) for _ in range(N)]
# ์ ๋ ฌ
house.sort()
# ์์ดํ์ด ๊ฐ๊ฒฉ์ ์ผ๋ง๋ ํด์ผํ ์ง ๋ชจ๋ฅด๋ ์ต๋๊ฑฐ๋ฆฌ์ ์ต์๊ฑฐ๋ฆฌ์ ์ค๊ฐ๋ถํฐ ์์
left = 1
right = house[-1] - house[0]
answer = 0
while right >= left:
# ์ค๊ฐ๊ฐ (์์ดํ์ด ๊ฐ๊ฒฉ)
mid = (right + left) // 2
# ์์ดํ์ด ์ค์น # ์ฒ์ ์ค์นํ๊ณ ์์
wifi_cnt = 1
before_install = house[0]
for i in range(1, N):
if house[i] >= before_install + mid: # ์ค์น ๊ฐ๊ฒฉ ์ถฉ์กฑ
wifi_cnt += 1
before_install = house[i]
# ์์ดํ์ด ๊ฐ์๊ฐ C๋ณด๋ค ์์ผ๋ฉด ๋ ์ค์นํด์ผ ํ๋ค. ๊ฐ๊ฒฉ์ ์ขํ์.
if wifi_cnt < C:
right = mid - 1
# ์์ดํ์ด ๊ฐ์๊ฐ C๋ณด๋ค ๋ง๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋ ์ค์นํด์ผ ํ๋ค. ๊ฐ๊ฒฉ์ ๋ํ์.
else:
left = mid + 1
# ์ค๊ฐ์ mid๋ฅผ ์ ์ฅํ๋ ์ด์ ๋ ๊ฐ์๋ฅผ ๋ง์กฑํ ๋ ๊ฐ๊ฒฉ์ ๋๋ฆฌ๋ ค๋ค๊ฐ
# ๋ค์์๋ ๊ฐ์๋ฅผ ๋ง์กฑ์ํค์ง ๋ชปํ๊ณ while๋ฌธ์ด ์ข
๋ฃ๋ ์ ์๋ค.
answer = mid
print(answer)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋ฐ์ํ
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 5430. AC (0) | 2020.10.18 |
---|---|
[python] ๋ฐฑ์ค - 2004. ์กฐํฉ 0์ ๊ฐ์ (1) | 2020.10.17 |
[python] ๋ฐฑ์ค - 1735. ๋ถ์ ํฉ (0) | 2020.10.15 |
[python] ๋ฐฑ์ค - 1965. ์์ ๋ฃ๊ธฐ (0) | 2020.10.14 |
[python] ๋ฐฑ์ค - 2504. ๊ดํธ์ ๊ฐ (0) | 2020.10.13 |