1. ๋ฌธ์ ์ค๋ช
- ์
๋ ฅ :
- ์ฒซ์งธ ์ค์ ๋๋ฌด์ ์ N๊ณผ ์๊ทผ์ด๊ฐ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ ๋๋ฌด์ ๊ธธ์ด M
- ๋์งธ ์ค์๋ ๋๋ฌด์ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค.
- ์ถ๋ ฅ :์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅ
2. ์ฝ๋
solution1.py
# -*- coding: utf-8 -*-
import sys
input = sys.stdin.readline
n, m =map(int, input().split())
tree = list(map(int, input().split()))
start = 0
end = max(tree)
result = 0
while start <= end:
mid = (start + end) //2
#h๊ธฐ์ค์ผ๋ก ์๋ฅธ ํ ๊ฐ์ ธ๊ฐ ์ ์๋ ๋๋ฌด ๊ธธ์ด total
total = 0
for i in range(n):
if tree[i] > mid:
total += tree[i] - mid
if total == m:
result = mid
break
elif total < m : #๋๋ฌด๊ธธ์ด๊ฐ ๋ถ์กฑํ๋ฉด mid๋ฅผ ์์ชฝ์ผ๋ก
end = mid-1
else: #๋๋ฌด์์ด ์ถฉ๋ถํ๋ฉด ์ ์ฅ
start = mid+1
result = mid
print(result)
solution2.py
# -*- coding: utf-8 -*-
import sys
input = sys.stdin.readline
n, m =map(int, input().split())
tree = list(map(int, input().split()))
start = 0
end = max(tree)
result = 0
while start <= end:
mid = (start + end) //2
#h๊ธฐ์ค์ผ๋ก ์๋ฅธ ํ ๊ฐ์ ธ๊ฐ ์ ์๋ ๋๋ฌด ๊ธธ์ด total
total = 0
for i in range(n):
if tree[i] > mid:
total += tree[i] - mid
if total < m : #๋๋ฌด๊ธธ์ด๊ฐ ๋ถ์กฑํ๋ฉด mid๋ฅผ ์์ชฝ์ผ๋ก
end = mid-1
else: #๋๋ฌด์์ด ์ถฉ๋ถํ๋ฉด ์ ์ฅ
start = mid+1
result = mid
print(result)
3. ํ๊ณ
- ๋๋ฌด์ ๋์ด๊ฐ 1,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์ ๋๋ 0์ด๊ธฐ ๋๋ฌธ์ ์ด์งํ์์ ์ฌ์ฉํด์ ํ์์๊ฐ์ ์ค์ฌ์ผํ๋ค.
- ๋ชฉ์ฌ ์ ๋จ๊ธฐ ๋์ด๋ฅผ mid๋ก ๋ณด๊ณ start์ end์ ์ค๊ฐ๊ฐ์ผ๋ก ์ค์ ํ๋ค. (์ด๊ธฐ start=0, end=max(tree))
- ์ ๋จ๊ธฐ ๋์ด mid๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋์ ๋ ์ป์ ์ ์๋ ๋๋ฌด์ ๊ธธ์ด๋ฅผ total์ ์ ์ฅํ๋ค.
- ๊ฐ์ ธ๊ฐ๊ธธ ์ํ๋ ๊ธธ์ด m๊ณผ ๋น๊ตํ์ฌ ๊ธธ์ด๊ฐ ๊ฐ์ผ๋ฉด result์ mid๋ฅผ ์ ์ฅ,
- ๋๋ฌด์ ๊ธธ์ด๊ฐ ๋ถ์กฑํ๋ฉด ๋ ์์ ์ ๋จ๊ธฐ ๊ธฐ์ค(mid)๋ก ์ดํด๋ด์ผํ๋ฏ๋ก, end = mid-1ํ์ฌ ํ์ฌ๋ณด๋ค ์์์ ๋จ๊ธฐ ๊ธฐ์ค์ผ๋ก ๋๋ฌด๋ฅผ ์๋ฅด๋๋ก ํ๋ค.
- ๋๋ฌด์ ๊ธธ์ด ์ถฉ๋ถํ๋ฉด ์ผ๋จ start= mid+1๋ฅผ ํตํด ์ค๋ฅธ์ชฝ๋ ํ์ํ ์ฌ์ง๋ฅผ ๋จ๊ฒจ๋๊ณ , result์๋ mid๋ฅผ ์ ์ฅํ๋ค. (์ต๋ํ m๊ณผ ๋น์ทํ ๊ธธ์ด์ ๋๋ฌด๋ฅผ ๋ด๋ ๊ฒ์ด ์ค์ํ๋ฏ๋ก, ํ๋ณด๊ฐ ์๊ธฐ๋ฉด ์ผ๋จ ์ ์ฅ, ์ด์งํ์์ ํ๋ฉฐ m๊ณผ ๋ ๊ฐ๊น์ด ์๋ก update)
- PyPy3๋ก ์ ์ถํด์ผ ์๊ฐ์ด๊ณผ๊ฐ ์๋๋ค.
- solution1.py : 273888KB, 580ms
- solution2.py : 273884KB, 356ms
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] #2003 ์๋ค์ ํฉ 2 (Python) (0) | 2022.02.19 |
---|---|
[๋ฐฑ์ค] #2110 ๊ณต์ ๊ธฐ ์ค์น (Python) (0) | 2022.01.29 |
[๋ฐฑ์ค] #14502 ์ฐ๊ตฌ์ (Python) (0) | 2022.01.21 |
[๋ฐฑ์ค] #1260 DFS์ BFS (Python) (0) | 2022.01.19 |
[๋ฐฑ์ค] #18405 ๊ฒฝ์์ ์ ์ผ (Python) (0) | 2022.01.18 |