๋ฐฑ์ค (boj) ํ์ด์ฌ - 2805 : ๋๋ฌด ์๋ฅด๊ธฐ
๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/2805
2805๋ฒ: ๋๋ฌด ์๋ฅด๊ธฐ
๋ฌธ์ ์๊ทผ์ด๋ ๋๋ฌด M๋ฏธํฐ๊ฐ ํ์ํ๋ค. ๊ทผ์ฒ์ ๋๋ฌด๋ฅผ ๊ตฌ์ ํ ๊ณณ์ด ๋ชจ๋ ๋งํด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, ์ ๋ถ์ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ์์ฒญํ๋ค. ์ ๋ถ๋ ์๊ทผ์ด๋ค ์ง ๊ทผ์ฒ์ ๋๋ฌด ํ ์ค์ ๋ํ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ๋ด์ฃผ์๊ณ , ์๊ทผ์ด๋ ์๋ก ๊ตฌ์ ํ ๋ชฉ์ฌ์ ๋จ๊ธฐ๋ฅผ ์ด์ฉํด์ ๋๋ฌด๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค. ๋ชฉ์ฌ์ ๋จ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค. ๋จผ์ , ์๊ทผ์ด๋ ์ ๋จ๊ธฐ์ ๋์ด H๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋์ด๋ฅผ ์ง์ ํ๋ฉด ํฑ๋ ์ด ๋ ์ผ๋ก๋ถํฐ H๋ฏธํฐ ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๊ทธ ๋ค์, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด๋ฅผ ๋ชจ๋ ์ ๋จํด๋ฒ๋ฆฐ๋ค. ๋ฐ
www.acmicpc.net
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ : ์ด๋ถํ์
๋ฌธ์ ์ ์ถ์, python์ผ๋ก๋ ์๋ฌด๋ฆฌ ํด๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ์ด์ฉ ์ ์์ด pypy๋ก ์ ์ถํ๋๋ฐ ๋์ค์ ํ๋ฒ ๋ค์ํด๋ด์ผ๊ฒ ๋ค..
์ ๋ต์ฝ๋ -python (pypy๋ก ์ ์ถ)
N, M = map(int,input().split())
arr = list(map(int,input().split()))
arr.sort()
left = 1 #์ ์ผ ๋ง์ด ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ.
right = max(arr) #์ ์ผ ์กฐ๊ธ ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ.
answer= -1
while(left<=right):
mid = (left+right)//2
sum = 0
for i in arr :
if i-mid >= 0 : sum += i-mid
if sum>=M :
left = mid +1
else :
right = mid -1
print(right)