~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/1654
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- N์ ๋ฒ์๊ฐ ํฌ๋ฏ๋ก ์ด์งํ์์ผ๋ก ํ์ดํด์ผ ํ๋ค.
- ๊ธธ์ด๊ฐ ๊ฐ์ฅ ๊ธด ๋์ ์ end๊ฐ, 0์ start๊ฐ์ผ๋ก ๋๊ณ ์ค๊ฐ ๊ฐ์ผ๋ก mid๋ฅผ ์ ์ธํ๋ค.
- start์ end๊ฐ ๊ต์ฐจ๋๋ ์ง์ ์์ ์ข ๋ฃํ๋ while๋ฌธ์ ์์ฑํ์ฌ ์ต๋ ๊ธธ์ด๋ฅผ ์ฐพ๋๋ค.
- mid๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ๋์ ๋ณ ์์ฑ๋๋ ๋์ ๊ฐ์๋ฅผ ๋ชจ๋ ๋ํ๋ค
- ์ด ํฉ(cnt)์ด N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด = ๋ง๋ค ์ ์๋ ๋์ ๊ฐ์๊ฐ ์ํ๋ ๊ฐ์๋ณด๋ค ํฌ๋ค๋ฉด
mid ๊ธธ์ด๋ฅผ ๋๋ ค ๊ฐ์๋ฅผ ๋ฎ์ถฐ์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก start = mid+1
- ๊ทธ ๋ฐ๋๋ end = mid - 1
์์ฑ ์ฝ๋
import sys
input = sys.stdin.readline
K, N = map(int, input().split())
numbers = []
maxNum = 0
for i in range(K):
number = int(input())
numbers.append(number)
start = 0
end = max(numbers)
while start <= end:
cnt = 0
mid = (start + end)//2
if mid == 0: # start์ end๊ฐ ๋ชจ๋ 0์ผ ๋
break
for n in numbers:
cnt += n//mid
if cnt >= N: # ์ฃผ์ : cnt == N ์ฐพ๋๋ผ๋ ์ต๋ ๊ฐ์ ์ฐพ์์ผ ํจ
start = mid + 1
else:
end = mid - 1
print(end)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
REFERENCE
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ๋ฐฑ์ค 12891 DNA ๋น๋ฐ๋ฒํธ | ์ฌ๋ผ์ด๋ฉ ์๋์ฐ (0) | 2023.08.04 |
---|---|
[JAVA] ๋ฐฑ์ค 2961 ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์ (0) | 2023.08.04 |
[Python] ๋ฐฑ์ค 9655 ๋ ๊ฒ์ | DP (0) | 2023.06.18 |
[Python] ๋ฐฑ์ค 2579 ๊ณ๋จ ์ค๋ฅด๊ธฐ | DP (2) | 2023.06.16 |
[Python] ๋ฐฑ์ค 1966 ํ๋ฆฐํฐ ํ (0) | 2023.06.11 |