๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

[๋ฐฑ์ค€] [Python] Class2_2805๋ฒˆ_๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

Dbswnstjd 2022. 10. 27. 18:46

๋ฌธ์ œ

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

 

2805๋ฒˆ: ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

์ฒซ์งธ ์ค„์— ๋‚˜๋ฌด์˜ ์ˆ˜ N๊ณผ ์ƒ๊ทผ์ด๊ฐ€ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) ๋‘˜์งธ ์ค„์—๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‚˜๋ฌด์˜ ๋†’์ด์˜ ํ•ฉ์€ ํ•ญ์ƒ M๋ณด

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 2805๋ฒˆ ๋ฌธ์ œ - ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ
import sys
n, m = map(int, sys.stdin.readline().split())
trees = list(map(int, sys.stdin.readline().split()))

start, end = 0, max(trees)


while start <= end:
    mid = (start + end) // 2
    tree = 0 # ์ž˜๋ฆฐ ๋‚˜๋ฌด ํ•ฉ
    for i in trees:
        if i > mid: # mid ๋ชจ๋‹ค ํฐ ๋‚˜๋ฌด ๋†’์ด๋Š” ์ž˜๋ฆผ
            tree += i - mid
    if tree >= m: # ์›ํ•˜๋Š” ๋‚˜๋ฌด ๋†’์ด๋ณด๋‹ค ๋” ๋งŽ์ด ์ž˜๋ ธ์œผ๋ฉด
        start = mid + 1
    else:  # ์›ํ•˜๋Š” ๋‚˜๋ฌด ๋†’์ด๋ณด๋‹ค ๋œ ์ž˜๋ ธ์œผ๋ฉด
        end = mid - 1
print(end)

์ด๋ถ„ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.