[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)
'Problem Solving > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[baekjoon]python #4949 ๊ท ํ์กํ ์ธ์ (0) | 2022.06.24 |
---|---|
[baekjoon]python #1966 ํ๋ฆฐํฐ ํ (0) | 2022.06.23 |
[baekjoon]python #1874 ์คํ ์์ด (0) | 2022.06.23 |
[baekjoon]python #10773 ์ ๋ก (0) | 2022.06.23 |
[baekjoon]python #10816 ์ซ์ ์นด๋ 2 (0) | 2022.06.03 |
๋๊ธ