Problem Solving/항해99

99클럽 코테 스터디 5일차 TIL + 투 포인터

wrathlion 2025. 4. 7. 00:37

문제

Baekjoon####: 수열

  • 설명: 연속된 k일 간의 온도의 합을 최대로 만들어라

풀이

  1. 변수를 탐색하며 온도의 값을 더해간다.
  2. 만약 지금까지 더한 일수가 k라면 정답과 현재 온도의 합 중 큰 값을 저장한다.
    • 이후 가장 앞의 일자의 온도를 뺴준다.
  • 이렇게하면 정확히 k개의 온도의 합을 $O(n)$만에 유지할 수 있게된다.

오늘의 회고

  • 투 포인터를 활용하여 슬라이딩 윈도우를 구현하는 문제이다.
  • 오랜만에 슬라이딩 윈도우를 구현하니 옛날 기억이 새록새록 났다.

Code

# Baekjoon02559.py
import sys
input = sys.stdin.readline

n, k = map(int, input().split())
arr = list(map(int, input().split()))

ans = -0x3f3f3f3f
curr = [0, 0]
for i in range(n):
    curr[0] += arr[i]
    curr[1] += 1

    if curr[1] == k:
        ans = max(ans, curr[0])
        curr[0] -= arr[i - (k - 1)]
        curr[1] -= 1

print(ans)