์๋ ํ์ธ์! ์ค๋์ ๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง์ ๋ฌธ์ ๋ฒํธ 2512๋ฒ์ ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์์ฐ ์์ฒญ ๋ฆฌ์คํธ์์ ์ด ์์ฐ์ ์ด๊ณผํ์ง ์๋๋ก ์์ฐ ์ํ์ ์ ์ฐพ์์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค. ์๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ๊ทผ ๋ฐฉ๋ฒ๊ณผ ์ ๋ต ์ฝ๋์ ๋๋ค.
1. ๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ์์ฐ ์์ฒญ ๋ฆฌ์คํธ์์ ๊ฐ ์ง๋ฐฉ์ ์์ฐ ์์ฒญ์ ์ถฉ์กฑํ๋ฉด์๋ ์ด ์์ฐ์ ์ด๊ณผํ์ง ์๋ ์ต๋ ์์ฐ ์ํ์ ์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ URL : https://www.acmicpc.net/problem/2512
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ: ์์ฐ ์์ฒญ์ ๊ฐ์์ ๊ฐ ์ง๋ฐฉ์ ์์ฐ ์์ฒญ ๋ฆฌ์คํธ, ์ด ์์ฐ์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ์ด์ง ํ์ ์ด๊ธฐํ: ์ต์ ์์ฐ ์ํ์ ๊ณผ ์ต๋ ์์ฐ ์ํ์ ์ ์ค์ ํฉ๋๋ค.
3) ์ด์ง ํ์ ์ํ: ์ค๊ฐ๊ฐ์ ๊ณ์ฐํ์ฌ ์์ฐ ์ํ์ ์ ์กฐ์ ํฉ๋๋ค.
4) ๊ฒฐ๊ณผ ์ถ๋ ฅ: ๊ฐ๋ฅํ ์ต๋ ์์ฐ ์ํ์ ์ ์ถ๋ ฅํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์
๋ ฅ๋ฐ๊ธฐ
N = int(input()) # ์์ฐ ์์ฒญ์ ๊ฐ์
arr = list(map(int, input().split())) # ๊ฐ ์ง๋ฐฉ์ ์์ฐ ์์ฒญ ๋ฆฌ์คํธ
M = int(input()) # ์ด ์์ฐ
# ์ด์ง ํ์์ ์ํ ์ด๊ธฐํ
low = 0 # ์ต์ ์์ฐ ์ํ์
high = max(arr) # ์ต๋ ์์ฐ ์ํ์
ans = 0 # ๊ฐ๋ฅํ ์ต๋ ์์ฐ ์ํ์
# ์ด์ง ํ์ ์์
while low <= high:
mid = (low + high) // 2 # ์ค๊ฐ๊ฐ ๊ณ์ฐ
sum = 0 # ํ์ฌ ์์ฐ ์ํ์ ์ผ๋ก ๋ฐฐ์ ๋ ์์ฐ์ ํฉ๊ณ
# ๋ชจ๋ ์์ฐ ์์ฒญ์ ๋ํด ์์ฐ ์ํ์ ์ ์ ์ฉ
for i in arr:
sum += min(i, mid)
# ์์ฐ ํฉ๊ณ๊ฐ ์ด ์์ฐ์ ๋๋ ๊ฒฝ์ฐ
if sum > M:
high = mid - 1 # ์ํ์ ์ ๋ฎ์ถ๋ค
else:
ans = mid # ํ์ฌ ์ํ์ ์ ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ์ ์ฅ
low = mid + 1 # ์ํ์ ์ ๋์ธ๋ค
# ์ต์ข
์ ์ผ๋ก ๊ฐ๋ฅํ ์ต๋ ์์ฐ ์ํ์ ์ ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
1) ์ด์ง ํ์ ์ด๊ธฐํ
• low: ์ต์ ์์ฐ ์ํ์ ์ 0์ผ๋ก ์ค์ ํฉ๋๋ค.
• high: ์ต๋ ์์ฐ ์ํ์ ์ ์์ฐ ์์ฒญ ๋ฆฌ์คํธ์ ์ต๋๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
• ans: ๊ฐ๋ฅํ ์ต๋ ์์ฐ ์ํ์ ์ ์ ์ฅํ ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
2) ์ด์ง ํ์ ์ํ
• mid: low์ high์ ์ค๊ฐ๊ฐ์ ๊ณ์ฐํ์ฌ ํ์ฌ ์์ฐ ์ํ์ ์ ๊ฒฐ์ ํฉ๋๋ค.
• ๊ฐ ์์ฐ ์์ฒญ์ ๋ํด min(i, mid)๋ฅผ ๊ณ์ฐํ์ฌ ์์ฐ ํฉ๊ณ๋ฅผ ๊ตฌํฉ๋๋ค.
• ์์ฐ ํฉ๊ณ๊ฐ ์ด ์์ฐ M์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ, high๋ฅผ mid - 1๋ก ์กฐ์ ํ์ฌ ์์ฐ ์ํ์ ์ ๋ฎ์ถฅ๋๋ค.
• ์์ฐ ํฉ๊ณ๊ฐ ์ด ์์ฐ M ์ดํ์ธ ๊ฒฝ์ฐ, ans์ ํ์ฌ ์์ฐ ์ํ์ ์ ์ ์ฅํ๊ณ , low๋ฅผ mid + 1๋ก ์กฐ์ ํ์ฌ ์์ฐ ์ํ์ ์ ๋์ ๋๋ค.
์ด ์ฝ๋๋ ์ด์ง ํ์์ ํตํด ํจ์จ์ ์ผ๋ก ์์ฐ ์ํ์ ์ ์ฐพ์๋ด๋ฉฐ, ๊ฐ ์ง๋ฐฉ์ ์์ฐ ์์ฒญ์ ๋ง์กฑ์ํค๋ฉด์๋ ์ด ์์ฐ์ ์ด๊ณผํ์ง ์๋๋ก ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ด์ง ํ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ๊ฒ์ ๋งค์ฐ ํจ์จ์ ์ด๊ณ ์ ์ ํ ์ ๊ทผ๋ฒ์ ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 2961[๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์] (0) | 2024.06.23 |
---|---|
BOJ(๋ฐฑ์ค) 2343[๊ธฐํ ๋ ์จ] (0) | 2024.06.21 |
BOJ(๋ฐฑ์ค) 2309[์ผ๊ณฑ ๋์์ด] (0) | 2024.06.20 |
BOJ(๋ฐฑ์ค) 15649[N๊ณผ M (1)], 15650[N๊ณผ M (2)] (0) | 2024.06.20 |
BOJ(๋ฐฑ์ค) 3020[๊ฐ๋ฅ๋ฒ๋ ] (0) | 2024.06.19 |