[Python] ๋ฐฑ์ค - 1912 ์ฐ์ํฉ (DP)
๐ ์ฒซ ๋ฒ์งธ ์๋ (์๊ฐ์ด๊ณผ)
- ์ด์ค for๋ฌธ์ผ๋ก ๊ฐ ์์ i๋ง๋ค ์ ์์๋ค๊ณผ์ ๋ถ๋ถํฉ์ ๊ตฌํ์ฌ ๊ทธ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ d[i]์ ์ ์ฅ
- d[i] ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅ
n = int(input())
array = list(map(int, input().split()))
d = [min(array)] * n
for i in range(n):
sum = 0
for j in range(i, -1, -1):
sum += array[j]
d[i] = max(d[i], sum)
print(max(d))
โ ๋ ๋ฒ์งธ ์๋ (์ฑ๊ณต)
- ๊ฐ ์์ i๋ง๋ค ๊ทธ ์์ ๋ถ๋ถํฉ์ ๊ตฌํ ํ์๋ ์์
- ์ด์ฐจํผ ์์๊ฐ ํฌํจ๋๋ฉด ์ต๋๊ฐ์ ๋ฌผ ๊ฑด๋๊ฐ๋ฏ๋ก i ์ง์ ์์์์ ํฉ๋ง ํ์ธํ๋ฉด ๋จ
n = int(input())
array = list(map(int, input().split()))
d = [0] * n
d[0] = array[0]
for i in range(1, n):
d[i] = max(array[i], d[i-1]+array[i])
print(max(d))
๋ฌธ์
n๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์์ ์์ด์ด ์ฃผ์ด์ง๋ค.
์ฐ๋ฆฌ๋ ์ด ์ค ์ฐ์๋ ๋ช ๊ฐ์ ์๋ฅผ ์ ํํด์ ๊ตฌํ ์ ์๋ ํฉ ์ค ๊ฐ์ฅ ํฐ ํฉ์ ๊ตฌํ๋ ค๊ณ ํ๋ค. ๋จ, ์๋ ํ ๊ฐ ์ด์ ์ ํํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด์ 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 ์ด๋ผ๋ ์์ด์ด ์ฃผ์ด์ก๋ค๊ณ ํ์. ์ฌ๊ธฐ์ ์ ๋ต์ 12+21์ธ 33์ด ์ ๋ต์ด ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ n(1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ n๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์ฃผ์ด์ง๋ค.
์๋ -1,000๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ต์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
10
10 -4 3 1 5 6 -35 12 21 -1
์์ ์ถ๋ ฅ 1
33
์์ ์ ๋ ฅ 2
10
2 1 -4 3 4 -4 6 5 -5 1
์์ ์ถ๋ ฅ 2
14
์์ ์ ๋ ฅ 3
-5
-1 -2 -3 -4 -5
์์ ์ถ๋ ฅ 3
-1