์๋ ํ์ธ์! ์ค๋์ ๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง์ ๋ฌธ์ ๋ฒํธ 1912๋ฒ์ ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์์ด์์ ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ URL: https://www.acmicpc.net/problem/1912
1. ๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ์์ด์์ ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๊ฐ์ ์ฐพ์์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์์ด์ด [2, 1, -4, 3, 4, -4, 6, 5, -5, 1]์ธ ๊ฒฝ์ฐ, ์ต๋ ํฉ์ ๊ฐ๋ ์ฐ์ ๋ถ๋ถ ์์ด์ [3, 4, -4, 6, 5]๋ก์ ๊ทธ ํฉ์ 14์ ๋๋ค.
2. ์ ๊ทผ๋ฒ
1. ์์ด์ ํฌ๊ธฐ n์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2. ์์ด์ ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ๋ก ์ ์ฅํฉ๋๋ค.
3. ๋์ ์ต๋ ํฉ(prefix sum)์ ์ด์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํฉ๋๋ค:
• ๊ฐ ์์๋ฅผ ๋์ ํ๋ฉด์ ํ์ฌ ์์๋ฅผ ํฌํจํ๋ ์ต๋ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
• ํ์ฌ ์์๋ฅผ ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ์ ํฌํจํ๋ ๊ฒฝ์ฐ ์ค ์ต๋๊ฐ์ ์ ํํฉ๋๋ค.
4. ๋์ ์ต๋ ํฉ ๋ฆฌ์คํธ์์ ์ต๋๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์ฒซ ๋ฒ์งธ ์ค์์ n์ ์
๋ ฅ๋ฐ์ (์์ด์ ํฌ๊ธฐ)
n = int(input())
# ์์ด์ ์
๋ ฅ๋ฐ์ ๋ฆฌ์คํธ๋ก ์ ์ฅ
arr = list(map(int, input().split()))
# ๋์ ์ต๋ ํฉ์ ๋ด์ ๋ฆฌ์คํธ ์ ์ธ, ๊ธธ์ด๋ n+1๋ก ์ค์
prefix = [0] * (n + 1)
# ๋์ ์ต๋ ํฉ ๊ณ์ฐ
for i in range(n):
# ์ด์ ๊น์ง์ ๋์ ํฉ์ ํ์ฌ ์์๋ฅผ ๋ํ ๊ฐ๊ณผ ํ์ฌ ์์ ์ค ์ต๋๊ฐ์ ์ ํ
prefix[i + 1] = max(prefix[i] + arr[i], arr[i])
# ๋์ ํฉ ๋ฆฌ์คํธ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ์ธํ ๊ฐ๋ค ์ค ์ต๋๊ฐ์ ์ถ๋ ฅ
print(max(prefix[1:]))
4. ์ฝ๋ ์ค๋ช
1. ์ ๋ ฅ ์ฒ๋ฆฌ
• ์ฒซ ๋ฒ์งธ ์ค์์ n์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค์์ n๊ฐ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ๋ก ์ ์ฅํฉ๋๋ค.
2. ๋์ ์ต๋ ํฉ(prefix sum) ๊ณ์ฐ
• ๋์ ์ต๋ ํฉ์ ๋ด์ ๋ฆฌ์คํธ prefix๋ฅผ ์ ์ธํฉ๋๋ค. ๊ธธ์ด๋ n+1๋ก ์ค์ ํฉ๋๋ค.
• ๊ฐ ์์๋ฅผ ๋์ ํ๋ฉด์ ํ์ฌ ์์๋ฅผ ํฌํจํ๋ ์ต๋ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
• prefix[i + 1]๋ prefix[i] + arr[i]์ arr[i] ์ค ์ต๋๊ฐ์ ์ ํํ์ฌ ์ ์ฅํฉ๋๋ค.
3. ์ต๋ ํฉ ๊ณ์ฐ
• ๋์ ํฉ ๋ฆฌ์คํธ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ์ธํ ๊ฐ๋ค ์ค ์ต๋๊ฐ์ ์ฐพ์ ์ถ๋ ฅํฉ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 11660[๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5] (0) | 2024.06.18 |
---|---|
BOJ(๋ฐฑ์ค) 2304[์ฐฝ๊ณ ๋ค๊ฐํ] (0) | 2024.06.17 |
BOJ(๋ฐฑ์ค) 2559[์์ด] (0) | 2024.06.17 |
BOJ(๋ฐฑ์ค) 7795[๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ] (0) | 2024.06.16 |
BOJ(๋ฐฑ์ค) 14252[๊ณต์ฝ์์ด] (0) | 2024.06.15 |