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