๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉps/๐Ÿ”ฅNormal

[๋ฐฑ์ค€ 1654๋ฒˆ] ๋žœ์„  ์ž๋ฅด๊ธฐ

by goguma.dev 2024. 9. 29.

๐Ÿ“–๋ฌธ์ œ:

 

๐Ÿ“™ํ’€์ด:

์ฒ˜์Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งค ๋•Œ๋Š” ๊ฐ€๋Šฅํ•œ ํฐ ์ˆ˜(๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋žœ์„ ์˜ ํ•ฉ / ํ•„์š”ํ•œ ๋žœ์„  ๊ฐœ์ˆ˜)์—์„œ -1์”ฉ ๋นผ๊ฐ€๋ฉฐ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐ”๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ..

๊ทธ๋ž˜์„œ ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ์ ˆ๋ฐ˜์”ฉ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๊ฐ€๋ฉด์„œ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ํฐ ๋žœ์„  ํ† ๋ง‰์˜ ๊ธธ์ด๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค. 

์‹œ๊ฐ„๋ณต์žก๋„: O(log(N))

 

โœ๏ธ์ฝ”๋“œ:

'''
https://www.acmicpc.net/problem/1654
๋ฌธ์ œ: ๋žœ์„  ์ž๋ฅด๊ธฐ
๋‚œ์ด๋„: ์‹ค๋ฒ„2
'''

# ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ํ’€์–ด์•ผ ๋จ!
import sys

line_num, need = map(int, input().split())
lines = []
for _ in range(line_num):
    lines.append(int(sys.stdin.readline()))

possible_max = int(sum(lines) / need)
index_min = 0
index_max = possible_max
answer = 0

while index_min <= index_max:
    sum = 0
    middle = (index_min + index_max) // 2
    if middle == 0:
        middle = 1
    
    for i in lines:
        sum += i // middle
    
    if sum >= need:
        index_min = middle + 1
    else:
        index_max = middle - 1
    
print(index_max)

 

๐Ÿ”—๋งํฌ:

https://www.acmicpc.net/problem/1654