![[til] 알고리즘 백준 수열](https://cdn.hashnode.com/res/hashnode/image/upload/v1743792226904/1fc33c8f-9be8-45f5-814b-9d6f0e23f09a.png)
📘 TIL (Today I Learned)
🧑💻 오늘의 문제: 2559번 수열
📌 문제 요약
🚩 알고리즘 분류
누적 합 (Prefix Sum)
슬라이딩 윈도우 (Sliding Window)
🖥️ 내가 작성한 코드 (슬라이딩 윈도우 방식 사용)
import sys
n, k = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
# 초기 K개 합 계산
current_sum = sum(arr[:k])
max_sum = current_sum
# 슬라이딩 윈도우 방식으로 합을 갱신하며 최대값을 찾는다.
for i in range(k, n):
current_sum += arr[i] - arr[i - k]
max_sum = max(max_sum, current_sum)
print(max_sum)
🔎 풀이 핵심 아이디어
첫 번째 K개의 숫자를 합해서 초기 합계를 구한다.
이후, 슬라이딩 윈도우 기법을 이용하여 한 칸씩 오른쪽으로 이동하면서,
이전에 더한 가장 왼쪽 값을 빼고, 새로 더할 가장 오른쪽 값을 더해 합을 갱신한다.갱신한 합을 매번 비교하며 최대 합을 구한다.
🔍 추가로 찾아본 좋은 풀이 방법 (다른 사람 풀이 참고)
n, k = map(int, input().split())
arr = list(map(int, input().split()))
# 누적합(prefix sum)을 미리 계산하여 활용
prefix_sum = [0]
for num in arr:
prefix_sum.append(prefix_sum[-1] + num)
max_sum = -float('inf')
for i in range(k, n + 1):
max_sum = max(max_sum, prefix_sum[i] - prefix_sum[i - k])
print(max_sum)
![[til] 프로그래머스 신규아이디 추천](https://cdn.hashnode.com/res/hashnode/image/upload/v1745249371004/97aa7a0b-1b1b-4f81-a5ef-790b9b682f08.png)
![[til] 알고리즘 백준 리그 오브 레전설](https://cdn.hashnode.com/res/hashnode/image/upload/v1745007840153/c6cf7c45-0d8f-4bee-ae9a-55cc454f3c92.png)
![[til] 알고리즘 백준 진우의 달 여행 (Small)](https://cdn.hashnode.com/res/hashnode/image/upload/v1744914681507/e80e8747-d4ff-4fd4-b595-33024a238ee1.png)
![[til] 알고리즘 JadenCase 문자열 만들기](https://cdn.hashnode.com/res/hashnode/image/upload/v1744823424388/57f5c5c1-7e85-4071-88e8-1ec09ed64828.png)
![[til] 알고리즘 백준 포도주 시식](https://cdn.hashnode.com/res/hashnode/image/upload/v1744724798661/286b75a2-50e0-481e-8e3f-2a6cb500d678.png)