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
์ฒ์ ํ์ด
1. ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ nCc๋ฅผ ๊ตฌํ๋ค
2. ๊ฐ์ฅ ๋จ์ด์ง ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค
from itertools import combinations
def minDist(arr):
result=1e9
for i in range(len(arr)-1):
result = min(result,arr[i+1]-arr[i])
return result
n, c = map(int,input().split())
houses=[]
for i in range(n):
houses.append(int(input()))
houses.sort()
combi = list(combinations(houses,c))
result=0
for i in combi:
result = max(minDist(i),result)
print(result)
๊ฒฐ๊ณผ: ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ
์กฐํฉ์ ๊ตฌํด์ ๋ฆฌ์คํธ์ ์ ์ฅํ๋ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ ๋ฏ.
n๊ณผ c๊ฐ ์ต๋ 20๋ง๊น์ง ๋ ์ ์๊ธฐ ๋๋ฌธ.
๋ ๋ฒ์งธ ํ์ด: binary search
๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ 1~10์ต์ด ๋ ์ ์๋ค. (๋ฌธ์ ์กฐ๊ฑด: ์ง ์ขํ๋ 0๋ถํฐ 10์ต)
๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฐ๊ฒฉ์ x๋ก ํ์ฌ, ๊ณต์ ๊ธฐ๋ฅผ 1๋ฒ ์ง๋ถํฐ ๋ง์ง๋ง ์ง๊น์ง ์ฐจ๋ก๋๋ก ์ค์นํด๋ณธ๋ค.
์ต์ข ์ ์ผ๋ก ์ค์น๋๋ ๊ณต์ ๊ธฐ์ ์๊ฐ c๊ฐ๋ณด๋ค ๋ง๋ค๋ฉด, ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ์ต๋ ๊ฐ๊ฒฉ์ x๋ณด๋ค ์ปค์ง ์ ์๋ค. --> x๋ฅผ ์ ์ฅํ๊ณ x๋ฅผ ๋๋ ค์ค๋ค.
์ต์ข ์ ์ผ๋ก ์ค์น๋๋ ๊ณต์ ๊ธฐ์ ์๊ฐ c๊ฐ๋ณด๋ค ์ ์ผ๋ฉด, ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ค์ฌ์ผ ๊ณต์ ๊ธฐ๋ฅผ c๊ฐ ์ค์นํ ์ ์๋ค. --> x๋ฅผ ์ค์ฌ์ค๋ค.
์ด๋ ๊ฒ x๋ฅผ ์ค๊ฐ๊ฐ๋ถํฐ ์์ํ์ฌ ์กฐ์ ํด๊ฐ๋ฉด์ ๊ณต์ ๊ธฐ ๊ฐ์๋ฅผ ํ์ ํ๋ฉด ๋๋ค.
์ด๋, ์ง ์ขํ๊ฐ ๋ฌด์์๋ก ์ ๋ ฅ๋๋ฏ๋ก x๋ฅผ ์กฐ์ ํ๋ ์์ ์ ํ๊ธฐ ์ ์ ์ง ์ขํ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ฃผ์ด์ผ ํ๋ค.
import sys
input = sys.stdin.readline
n, c = map(int,input().split())
houses=[]
for i in range(n):
houses.append(int(input()))
houses.sort() #์ง ์ขํ ์ ๋ ฌ
start = 1
end = houses[-1]-houses[0]
answer = 0
while start <= end:
mid = (start+end)//2
cur = houses[0]
cnt=1
#1๋ฒ ์ง๋ถํฐ ๊ฐ๊ฒฉ์ mid๋ก ํ์ฌ ๊ณต์ ๊ธฐ ์ค์นํด๋ณด๊ธฐ
for i in range(1,n):
if houses[i] >= cur+mid:
cur=houses[i]
cnt += 1
#์ค์น๋ ๊ณต์ ๊ธฐ ์๊ฐ c๋ณด๋ค ๋ง์ผ๋ฉด ๊ฐ๊ฒฉ์ ์ ์ฅํ๊ณ ์ฆ๊ฐ์ํค๊ธฐ
if cnt >= c:
start = mid+1
answer=mid
#์ค์น๋ ๊ณต์ ๊ธฐ ์๊ฐ c๋ณด๋ค ์ ์ผ๋ฉด ๊ฐ๊ฒฉ์ ๊ฐ์์ํค๊ธฐ
else:
end = mid-1
print(answer)
์ ๋ ฅ์ readline์ด ์๋๋ผ input์ผ๋ก ๋ฐ์ผ๋ฉด ๋ฐฑ์ค์์๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋๊น ์กฐ์ฌ
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > Binary Search' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]2512๋ฒ: ์์ฐ (1) | 2023.02.28 |
---|---|
[์ด์ฝํ ]๋ก๋ณถ์ด ๋ก ๋ง๋ค๊ธฐ / [๋ฐฑ์ค]2805๋ฒ: ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2023.02.24 |