2559λ²: μμ΄
πΒ λ¬Έμ μ 보
- λ¬Έμ μΆμ²: https://www.acmicpc.net/problem/2559
- λ¬Έμ μ ν: λμ ν©
- μμ μκ°: 30λΆ
λ¬Έμ μμ½
κΈΈμ΄κ° KμΈ κ΅¬κ°μ ν© μ€ κ°μ₯ ν° κ°μ μΆλ ₯
π€Β μμ΄λμ΄
ν΅μ¬ μκ³ λ¦¬μ¦
7κ°μ μ«μκ° μμ λ ꡬκ°μ ν¬κΈ°κ° 5μΈ κ²½μ° κ΅¬κ°μ λ€μκ³Ό κ°λ€.
- 1, 2, 3, 4, 5
- 2, 3, 4, 5, 6
- 3, 4, 5, 6, 7
μ΄λ λ³Όλμ²΄λ‘ νμλ λΆλΆμ κ³μ°μ μ€λ³΅μ λμ ν©μΌλ‘ κ°μ ν μ μλ€.
μμ¬ μ½λ
# λμ ν©: sums[i] = nums[0] + ... + nums[i]
sums = [0] * (n + 1)
nums = [0] + nums # index ν¨λ©
# λμ ν© κ³μ°
for idx in range(1, n + 1):
sums[idx] = sums[idx - 1] + nums[idx]
# λͺ¨λ κ΅¬κ° μ€ κ°μ₯ ν° κ° κ΅¬νκΈ°
for start in ꡬκ°μ΄ κ°λ₯ν κ³³:
# startλΆν° kκ°μ ꡬκ°ν©: sums[start + k - 1] - sums[start - 1]
μκ° λ³΅μ‘λ
- λμ ν© κ³μ°: $O(n)$
- κ°μ₯ ν° κ΅¬κ° κ³μ°: $O(n)$
μ΅μ’ μκ° λ³΅μ‘λ: $O(n)$
π¨οΈΒ μ μΆλ ₯ λΆμ
μκ° λ³΅μ‘λ λΆμ
- μμ΄μ μμ κ°μκ° μ΅λ 10λ§κ°μ΄λ―λ‘ $O(nlogn)$μ΄νμ μκ³ λ¦¬μ¦ μ¬μ©
μ μμ¬ν
- k = 3μ΄κ³ ꡬκ°μ μμμ startμ΄λ©΄ ꡬκ°μ λμ start + 3 - 1μ΄λ€. start + 3μ΄ μλλ€.
μΆκ° ν μ€νΈ μΌμ΄μ€
5 3
1 2 3 4 5
-> 12
πΒ μκ° μ 리
λμ ν©μ ꡬν λ μμ 0μ ν¨λ©νλ μ΄μ
λμ ν©μ μ μλ λ€μκ³Ό κ°λ€.
sums[i] = nums[0] + ... + nums[i]
λμ ν©μΌλ‘ ꡬκ°ν©μ ꡬνλ €λ©΄ λ€μκ³Ό κ°λ€.
section(start, end) = sums[end] - sums[start - 1]
μ΄λ, sumsλ₯Ό 0λΆν° μμνλ©΄ sums[0 - 1] = sums[-1]
μ΄ λ°μνλ€.
μ΄λ¬ν μν©μ μ½κ² μ²λ¦¬νκΈ° μν΄ μμ 0μ νλ ν¨λ©νλ€.
ꡬκ°μ΄ κ°λ₯ν κ³³μ λ²μ
1λ²μ§Έ μλΆν° nλ²μ§Έ μλ range(1, n + 1)
λ‘ ννν μ μλ€.
μ΄λ, kκ°μ μμλ₯Ό κ°μ§ μ μλ startμ λ²μλ range(1, n + 1 - (k - 1))
μ΄ λλ€.
range(1, n + 1 - k)
λ startλ‘λΆν° kκ° λ¨μ΄μ§ κ³³λ€μ λͺ¨μμ λνλ΄λ―λ‘ λ€λ₯΄λ€.
πΒ μμ€ μ½λ
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
nums = list(map(int, input().split()))
def solution(n, k, nums):
nums = [0] + nums
sums = [0 for _ in range(n + 1)]
# λμ ν© κ΅¬νκΈ°
for idx in range(1, n + 1):
sums[idx] = sums[idx - 1] + nums[idx]
# λͺ¨λ κ΅¬κ° μ€ κ°μ₯ ν° κ° κ΅¬νκΈ°
answer = float("-inf")
for idx in range(1, n + 1 - (k - 1)):
result = sums[idx + k - 1] - sums[idx - 1]
answer = max(result, answer)
return answer
print(solution(n, k, nums))