๐น ์ฐ์ํฉ 2
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
42828KB
204ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INF = int(1e9)
n = int(input())
numbers = list(map(int, input().split()))
dp = [[0] * 2 for _ in range(n)]
dp[0][0] = numbers[0]
dp[0][1] = numbers[0]
for i in range(1, n):
# ์ซ์๋ฅผ ์ ์ธํ์ง ์์ ๊ฒฝ์ฐ
dp[i][0] = max(dp[i-1][0] + numbers[i], numbers[i])
# ํ๋์ ์ซ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ
dp[i][1] = max(dp[i-1][0], dp[i-1][1] + numbers[i])
result = -INF
for d in dp:
result = max(result, max(d))
print(result)
3. ํด์ค
dp ํ ์ด๋ธ์ ์ฐ์ํฉ์์ ํ๋์ ์ซ์๋ฅผ ์ ์ธํ์ง ์์ ๊ฒฝ์ฐ โ0โ๊ณผ ์ ์ธํ ๊ฒฝ์ฐ โ1โ์ ๊ตฌ๋ถํ์ฌ ์ด์ฐจ์ ๋ฐฐ์ด๋ก ์ด๊ธฐํํ๋ค.
์ซ์ ํ ๊ฐ ์ด์์ ๋ฌด์กฐ๊ฑด ์ฌ์ฉํด์ผ ํ๋ฏ๋ก dp[0]์ ์์์ ๋ ์ผ์ด์ค ๋ชจ๋ ์์ด์ ๊ฐ์ฅ ์ฒซ ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
์ซ์๊ฐ ์ ์ธ๋์ง ์์ ์ฐ์ํฉ์ ์ต๋๊ฐ
dp[i][0]
(์ด์ ๊น์ง ํฉํด์จ ์ซ์ + ํ์ฌ ๋ณธ์ธ์ ๊ฐ)๊ณผ (ํ์ฌ ๋ณธ์ธ์ ๊ฐ)์ ๋น๊ตํด๋ดค์ ๋ (ํ์ฌ ๋ณธ์ธ์ ๊ฐ)์ด ๋ ํฌ๋ค๋ฉด ์ด์ ํฉ์ ์ถ๊ฐํด์ค ํ์๊ฐ ์๋ค.
dp[i-1] + numbers[i]
(์ด์ ๊น์ง ํฉํด์จ ์ซ์ + ํ์ฌ ๋ณธ์ธ์ ๊ฐ) /numbers[i]
(ํ์ฌ ๋ณธ์ธ์ ๊ฐ)โ dp[i][0] = max(dp[i-1][0] + numbers[i], numbers[i])
์ซ์๊ฐ ์ ์ธ๋์์ ๋ ์ฐ์ํฉ์ ์ต๋๊ฐ
dp[i][1]
dp[i][1]์ ํ์ฌ๊น์ง ์ซ์ ํ๋๋ ๋ฌด์กฐ๊ฑด ์ ์ธ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค.
๋ ๊ฐ์ง ๊ฒฝ์ฐ ์ค ํฐ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ฅด๋ฉด ๋๋ค.
- ํ์ฌ ์๊น์ง๋ ํ ๋ฒ๋ ์ ์ธํ์ง ์์๊ณ , ํ์ฌ ๊ฐ์ ์ ์ธํ ๊ฒฝ์ฐ โ
dp[i-1][0]
- ์ด๋ฏธ ์์์ ์ ์ธํ ๊ฒฝ์ฐ์ ํ์ฌ ๊ฐ์ ๋ํ๋ ๊ฒฝ์ฐ โ
dp[i-1][1] + numbers[i]
โ dp[i][1] = max(dp[i-1][0], dp[i-1][1] + numbers[i]
- ํ์ฌ ์๊น์ง๋ ํ ๋ฒ๋ ์ ์ธํ์ง ์์๊ณ , ํ์ฌ ๊ฐ์ ์ ์ธํ ๊ฒฝ์ฐ โ