https://www.acmicpc.net/problem/2559
1. λ¬Έμ
λ§€μΌ μμΉ¨ 9μμ νκ΅μμ μΈ‘μ ν μ¨λκ° μ΄λ€ μ μμ μμ΄λ‘ μ£Όμ΄μ‘μ λ, μ°μμ μΈ λ©°μΉ λμμ μ¨λμ ν©μ΄ κ°μ₯ ν° κ°μ μμλ³΄κ³ μ νλ€.
μλ₯Ό λ€μ΄, μλμ κ°μ΄ 10μΌ κ°μ μ¨λκ° μ£Όμ΄μ‘μ λ,
3 -2 -4 -9 0 3 7 13 8 -3
λͺ¨λ μ°μμ μΈ μ΄νκ°μ μ¨λμ ν©μ μλμ κ°λ€.
μ΄λ, μ¨λμ ν©μ΄ κ°μ₯ ν° κ°μ 21μ΄λ€.
λ§€μΌ μΈ‘μ ν μ¨λκ° μ μμ μμ΄λ‘ μ£Όμ΄μ‘μ λ, μ°μμ μΈ λ©°μΉ λμμ μ¨λμ ν©μ΄ κ°μ₯ ν° κ°μ κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μλ λ κ°μ μ μ Nκ³Ό Kκ° ν κ°μ 곡백μ μ¬μ΄μ λκ³ μμλλ‘ μ£Όμ΄μ§λ€. 첫 λ²μ§Έ μ μ Nμ μ¨λλ₯Ό μΈ‘μ ν μ 체 λ μ§μ μμ΄λ€. Nμ 2 μ΄μ 100,000 μ΄νμ΄λ€. λ λ²μ§Έ μ μ Kλ ν©μ ꡬνκΈ° μν μ°μμ μΈ λ μ§μ μμ΄λ€. Kλ 1κ³Ό N μ¬μ΄μ μ μμ΄λ€. λμ§Έ μ€μλ λ§€μΌ μΈ‘μ ν μ¨λλ₯Ό λνλ΄λ Nκ°μ μ μκ° λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. μ΄ μλ€μ λͺ¨λ -100 μ΄μ 100 μ΄νμ΄λ€.
μΆλ ₯
첫째 μ€μλ μ λ ₯λλ μ¨λμ μμ΄μμ μ°μμ μΈ KμΌμ μ¨λμ ν©μ΄ μ΅λκ° λλ κ°μ μΆλ ₯νλ€.
2. λ¬Έμ μ κ·Ό
κ·Έλ¦Όμ ννμ μ£Όμ΄μ§λ 쑰건μ μκ°λ³΅μ‘λ κ³μ°μ ν΅ν΄ DP λ¬Έμ λΌλ κ²μ μ μ μμλ€.
λλ¬Έμ O(n) μκ°λ³΅μ‘λλ‘ λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌνλ€.
μ λ ₯ κ°
10 2
3 -2 -4 -9 0 3 7 13 8 -3
μΌ λ
λμ ν©μ ꡬνλ€.
[0, 3, 1, -3, -12, -12, -9, -2, 11, 19, 16]
μ΄ λμ¨λ€. 0λ²μ§Έλ 0μΌλ‘ λΉ κ°μ λκ³ 1λΆν° nκΉμ§ ꡬνλ€.
κ·Έ λ€μ
dp[i] - dp[i-k]
μ νμμ ν΅ν΄ kμΌμ μ¨λμ ν©μ ꡬν μ μλ€.
μμ μμλ‘ λ§μ½ 4μΌ 5μΌμ μ¨λμ ν©μ ꡬνλ€λ©΄ dp[5] - dp[5-2]
μ¦, -12--3 = -9λ₯Ό ꡬν μ μλ€.
μ΄λ° λ°©μμΌλ‘ kλΆν° n+1κΉμ§ KμΌμ μ¨λμ ν©μ΄ μ΅λκ° λλ κ°μ ꡬνλ€.
3. νλ¦° λΆλΆ
μ²μμ μ μΆν μ½λλ€.
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
graph = list(map(int, input().split()))
dp = [0]*(n+1)
for i in range(1, n+1):
dp[i]=dp[i-1]+graph[i-1]
answer = 0
for i in range(k, n+1):
answer = max(answer, dp[i]-dp[i-k])
# print(dp)
print(answer)
μμ μ λ΅μ μ λ‘ λμμ§λ§ νλ Έλ€.
μ΄μ λ λ΅μ΄ μμμΌ μ μκΈ° λλ¬Έμ answerμ μ΄κΈ°κ°μ 0μΌλ‘ νλ©΄ μλλ€.
λ§μ½μ μ λ ₯μ΄
7 6
-100 -100 -100 -100 -100 -100 -100
μ£Όμ΄μ§λ€λ©΄, 0μ μΆλ ₯νλ€. νμ§λ§ λ΅μ -600μ΄λ€.
λλ¬Έμ answerμ μμ μ΅μκ°μΌλ‘ μ΄κΈ°ν ν΄μΌλλ€.
4. μ λ΅
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
graph = list(map(int, input().split()))
dp = [0]*(n+1)
for i in range(1, n+1):
dp[i]=dp[i-1]+graph[i-1]
## ν΅μ¬
answer = -sys.maxsize
for i in range(k, n+1):
answer = max(answer, dp[i]-dp[i-k])
# print(dp)
print(answer)
'π Development > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μνν°μ΄ Softeer] λ°μ΄λ¬μ€ (Lv.2) - νμ΄μ¬(Python) (0) | 2024.06.24 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] μ£Όμ κ°κ²©(Lv.2) - νμ΄μ¬(Python) (0) | 2024.06.19 |
[νλ‘κ·Έλλ¨Έμ€] μμ£Όνμ§ λͺ»ν μ μ (Lv.1) - νμ΄μ¬(Python) (0) | 2024.06.19 |
[νλ‘κ·Έλλ¨Έμ€] H-Index (Lv.2) - νμ΄μ¬(Python) (0) | 2024.06.19 |
[Softeer] κΈκ³ νΈμ΄ νμ΄μ¬ (0) | 2023.05.26 |