4️⃣ Python/Problem Solving

[Python Algorithm] 연속합 BOJ #1912

seolhee2750 2022. 1. 31. 17:23
문제

https://www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 쀄에 μ •μˆ˜ n(1 ≤ n ≤ 100,000)이 μ£Όμ–΄μ§€κ³  λ‘˜μ§Έ μ€„μ—λŠ” n개의 μ •μˆ˜λ‘œ 이루어진 μˆ˜μ—΄μ΄ μ£Όμ–΄μ§„λ‹€. μˆ˜λŠ” -1,000보닀 ν¬κ±°λ‚˜ κ°™κ³ , 1,000보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

www.acmicpc.net

 

λ‚΄ 문제 풀이
import sys
sys.setrecursionlimit(1000000)

n = int(input())
nums = list(map(int, input().split()))
sums = [nums[0]]

for i in range(1, n):
    if nums[i] < sums[-1] + nums[i]:
        sums.append(sums[-1] + nums[i])
    else:
        sums.append(nums[i])

print(max(sums))

πŸ‘‰ DP 문제둜, μ—°μ†λ˜λŠ” μˆ˜λ“€μ˜ ν•©μ˜ μ΅œλŒ€λ₯Ό μˆœμ„œλŒ€λ‘œ λˆ„μ ν•΄μ£ΌλŠ” 것이 포인트 !

  • μž…λ ₯받은 nums 리슀트λ₯Ό 순차적으둜 돌며 (ν˜„μž¬ κ°’ + λˆ„μ  ν•©)κ³Ό (ν˜„μž¬ κ°’)을 λΉ„κ΅ν–ˆλ‹€.
  • (ν˜„μž¬ κ°’)이 더 클 경우 μ•žμ—μ„œ μ—°μ†λœ μˆ˜λ“€μ˜ 합을 λ”ν•˜λŠ” 것이 μ†ν•΄μ΄λ―€λ‘œ
    ν˜„μž¬ 값을 κ·ΈλŒ€λ‘œ sum λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν–ˆλ‹€.
  • (ν˜„μž¬ κ°’ + λˆ„μ  ν•©)이 더 클 경우, λˆ„μ ν•΄μ˜¨ 합을 λ”ν•˜λŠ” 것이 μ΄λ“μ΄λ―€λ‘œ
    ν˜„μž¬κ°’μ— λˆ„μ ν•œ 값을 λ”ν•œ 값을 sums λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν–ˆλ‹€.
  • μœ„μ™€ 같은 싀행을 톡해 μ•žμ˜ μˆ˜μ— μ—°μ†ν•˜μ—¬ 값을 더할 것인지,
    μ•„λ‹ˆλ©΄ μƒˆλ‘œμš΄ 연속 합을 λ§Œλ“œλŠ” 것이 λ§žλŠ”μ§€ νŒλ³„ν•΄ μ£Όλ©΄ λœλ‹€.

 

πŸ’‘ ν”Όλ“œλ°±
  • μ£Όμ–΄μ§„ μ˜ˆμ‹œλ₯Ό 뢄석해보면 μ‰½κ²Œ 풀이 방법을 μ•Œ 수 μžˆλŠ” λ¬Έμ œμ˜€λ‹€.