λ°±μ€ 1912 νμ΄μ¬
https://www.acmicpc.net/problem/1912
10 -4 -3 1 5 6 -35 12 21 -1 = 33
2 1 -4 3 4 -4 6 5 -5 1 = 14
μμ μμμ κ°μ΄ μ°μλλ ν©μ μ΅λκ°μ ꡬνλ λ¬Έμ μ΄λ€.
μ΄ λ¬Έμ μμ νμ¬μ μμΉκ° μμμ΄κ³ μ΄ μμλ₯Ό μ΄μ κΉμ§μ μ°μλ ν©μ ν©νμ λ 0λ³΄λ€ ν°μ§ νμΈνλ κ²μ΄ ν΅μ¬μ΄λ€. ν©νλλ° 0λ³΄λ€ μμ κ²½μ°.. μ΅λκ°μ΄ μ΄μ΄κ° μ μλ€. λ°λλ‘... ν©νλλ° 0λ³΄λ€ ν° μκ° λμ€λ©΄... μ΅λ μ°μν©μ΄ λ νλ₯ μ΄ μμ§ λ¨μ μλ€λ κ²μ΄λ€. λμ κ³νλ²μ μ΄μ©ν΄μ ν μ μκ³ ... ν΄λΉ λ¬Έμ λ κ΅³μ΄ λ°°μ΄μ΄ μλλΌ λ³μμ κ°μ μ μ₯νλ©΄μ μ΅λκ°μ ꡬν μλ μλ€. λμ μλμ ν° μ°¨μ΄λ μλ€.
Python νμ΄ 1
λ°°μ΄μ μ΄μ©ν λμ κ³νλ²μΌλ‘ ν΄κ²°ν νμ΄μ΄λ€.
import sys
read = sys.stdin.readline
N = int(read())
arr = [0] + list(map(int, read().split()))
cache = [-1001] * (N+1)
for n in range(1, N+1):
cache[n] = max(arr[n], cache[n-1] + arr[n])
print(max(cache))
- μ£Όμ΄μ§ μ μλ μλ³΄λ€ μμ -1001μ μΊμμ μ΄κΈ°κ°μΌλ‘ μ¬μ©νλ€.
- μ΄μ κΉμ§ μ°μ ν©μ νμ¬ μμΉμ μ«μλ₯Ό λν κ°κ³Ό νμ¬ μμΉμ κ° μ€ λ ν° κ°μ μ μ₯νλ€.
- νμ¬ μμΉμ μ«μκ° μμμΈ κ²½μ° κ³μν΄μ λν΄λκ°κ³
- νμ¬ μμΉμ μ«μκ° μμ μΈ κ²½μ°... μ΄μ μ°μν©μ λνμ λ μμκ° λμ€λ©΄ λ€μ λ²μ μμκ° λμ€λ μμκ° λμ€λ 무쑰건 arr[n]μ΄ μ΅λκ°μ΄ λλ€. μ°μν©μ΄ λλ μμ΄μ μ΄κΈ°ννλ ν¨κ³Όλ₯Ό λ³Ό μ μλ€.
- νμ¬ μμΉμ μ«μκ° μμ μΈ κ²½μ°... μ΄μ μ°μν©μ λνμ λ μμκ° λμ€λ©΄ λ€μ λ²μ μμκ° λμ€λ©΄ κ³μ μ°μν©μ λν΄λκ°κ³ μμκ° λμ€λ©΄ λ€μ κ²½μ°μ μκ° λ°λ³΅λλ€.
Python νμ΄ 2
μ¬μ€μ νμ΄ 1κ³Ό λκ°μ μμ μ νλκ±°λ€. λ¨μ§ λ°°μ΄μ΄ μλλΌ λ³μ 2κ°λ₯Ό μ΄μ©νμ λΏμ΄λ€.
import sys
read = sys.stdin.readline
N = int(read())
arr = list(map(int, read().split()))
max_sum = arr[0]
curr_sum = arr[0]
for n in range(1, N):
temp = curr_sum + arr[n]
curr_sum = temp if curr_sum > 0 and temp > 0 else arr[n]
max_sum = curr_sum if curr_sum > max_sum else max_sum
print(max_sum)
- μ΅λ μ°μν©μ μ μ₯νλ max_sumκ³Ό νμ¬ μ°μν©μ μ μ₯νλ curr_sum λ³μλ₯Ό μ¬μ©νλ€.
- νμ¬ μ°μν©μ΄ μμμ΄κ³ νμ¬ μ°μν©μμ νμ¬ μμΉ κ°μ λνμ λ 0λ³΄λ€ ν¬λ©΄ λν κ°μ λ°ννκ³ μλλ©΄ νμ¬ μμΉ κ°μ μ°μν©μΌλ‘ μ§μ νλ€.
λκΈ