ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์์ ๋ค๋ฃฌ, ๋์ ์๋ฅด๊ธฐ, ๋๋ฌด ์๋ฅด๊ธฐ์ ๋์ผํ ์ด๋ถ ํ์ ์ ํ์ ๋ฌธ์ ์ด๋ค. N๊ฐ์ ์ง์ด ์ฃผ์ด ์ง ๋, ๊ฐ๊ฐ์ ์ง ์ฌ์ด์ C๊ฐ์ ๊ณต์ ๊ธฐ๋ฅผ ์ ์ ํ ์ค์นํ๋ ์ต๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ์์ ์ ๋ ฅ 1์ ๊ฒฝ์ฐ 1 2 4 8 9์ ๊ฐ์ด ์ง์ด ์์นํ๋ค. ๊ณต์ ๊ธฐ 3๋๋ฅผ ์ต๋ ๊ฑฐ๋ฆฌ๋ก ์ค์นํ๊ธฐ ์ํด์๋ 3์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ฅผ ์ด๋ถ ํ์์ผ๋ก ์ฐพ๊ธฐ ์ํด์๋ 1๊ณผ ๋ง์ง๋ง ์ง์ ๊ธฐ์ค์ผ๋ก ์ด๋ถ ํ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
์ฝ๋
from sys import stdin
if __name__ == "__main__":
n, c = map(int, stdin.readline().split())
locations = sorted([int(stdin.readline()) for _ in range(n)])
s, e = 1, locations[-1] - locations[0]
while s <= e:
set_loc = 0
m = (s + e) // 2
set_cnt = 1
for i in range(1, n):
if locations[i] >= locations[set_loc] + m:
set_cnt += 1
set_loc = i
if set_cnt >= c:
s = m + 1
else:
e = m - 1
print(e)
์ด์ ์ ๋ฌธ์ ๋ค๊ณผ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ํ๋์ ์ง์ ์ ํํ๊ณ , ๊ฑฐ๋ฆฌ (mid) ๋งํผ ์ฐจ์ด๊ฐ ๋๋์ง ํ์ธํ๊ณ ์ด๋ฅผ ๋ฐ๋ณตํ๋ฉด ๋ต์ ์ฐพ์ ์ ์๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16954 ์์ง์ด๋ ๋ฏธ๋ก ํ์ถ (0) | 2020.08.24 |
---|---|
๋ฐฑ์ค: 15558 ์ ํ ๊ฒ์ (0) | 2020.08.23 |
๋ฐฑ์ค: 2805 ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2020.08.22 |
๋ฐฑ์ค: 1654 ๋์ ์๋ฅด๊ธฐ (0) | 2020.08.22 |
๋ฐฑ์ค: 2251 ๋ฌผํต (0) | 2020.08.21 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ