๐Ÿ’ป Algorithm/Python

[Python] ๋ฐฑ์ค€ - 1912 ์—ฐ์†ํ•ฉ (DP)

์„ ์ฃผ 2021. 10. 25. 01:11

๐Ÿ‘† ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ (์‹œ๊ฐ„์ดˆ๊ณผ)

- ์ด์ค‘ 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