๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Problem Solving/BAEKJOON

[baekjoon]python #2805 ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

by DevIseo 2022. 6. 23.

[baekjoon]python #2805 ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

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

 

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

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

www.acmicpc.net

N,M=map(int,input().split())
tree = list(map(int,input().split()))
tree.sort() #binary search๋ฅผ ์œ„ํ•ด sort

l=1 #M์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘!
r=tree[-1] #array์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์ˆ˜

#left๊ฐ€ right๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„๋•Œ๊นŒ์ง€ while๋ฌธ ๋Œ๋ฆฌ๊ธฐ
while l<=r:
    mid=(l+r)//2 #binary search๋ฅผ ์œ„ํ•ด ์ค‘๊ฐ„๊ฐ’ ์ฐพ๊ธฐ
    
    #tree array์—์„œ ๋ฝ‘์•„์˜จ ์•„์ด(target)๊ฐ€ mid๋ณด๋‹ค ํด ๊ฒฝ์šฐ์—” ๊ทธ ์ฐจ๋ฅผ ๊ตฌํ•ด์„œ total array์— ๋„ฃ๊ณ ,
    #์•„๋‹Œ ๊ฒฝ์šฐ์—” 0์„ ๋„ฃ์–ด์ฃผ๊ธฐ!
    total=[target-mid if target>mid else 0 for target in tree]
    
    #total array์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ
    result = sum(total)
	
    #์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋‹ค๋ฉด left๋ฅผ mid๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™!
    if result>=M:
        l=mid+1
    #๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด right๋ฅผ mid๋ณด๋‹ค ์™ผ์ชฝ์œผ๋กœ ์ด๋™!
    else:
        r=mid-1

#์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ตœ๋Œ€ ๊ธธ์ด ์ถœ๋ ฅ
print(r)

๋Œ“๊ธ€