728x90

백준 - 2559_수열

시간 제한 1초, 메모리 제한 128MB

# 문제

입력

  • 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다.
  • 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다.
    • N은 2 이상 100,000 이하이다.
  • 두 번째 정수 K는 합을 구하기 위한 연속적인 날짜의 수이다.
  • K는 1과 N 사이의 정수이다.
  • 둘째 줄에는 매일 측정한 온도를 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다.
    • 이 수들은 모두 -100 이상 100 이하이다.

출력

  • 첫째 줄에는 입력되는 온도와 수열에서 연속적인 K일의 온도의 합이 최대가 되는 값을 출력한다.

# 접근 방법

  • 누적합과 투 포인터를 활용해주면 된다.
  • 우선 입력받은 온도의 누적합을 cumulative_sum에 저장해준 후 0번 인덱스에 0을 삽입해준다.
  • 이후, max_value를 -float('inf')로 설정해주고 left = 1, right = K 로 할당해준다.
  • while문 조건을 right < N+1이 될 때까지 아래 로직을 수행해준다.
    • now_value = cumulative_sum[right] - cumulative_sum[left-1]
    • max_value = max(now_value, max_value)
    • left +=1, right += 1
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline

N, K = map(int, input().split())
cumulative_sum = [0] * (N+1)
arr = list(map(int, input().split()))
for i in range(1, N+1):
    cumulative_sum[i] = cumulative_sum[i-1] + arr[i-1]

max_value = -float('inf')
left, right = 1, K
while right < N+1:
    now_value = cumulative_sum[right] - cumulative_sum[left-1]
    max_value = max(max_value, now_value)
    left += 1
    right += 1

print(max_value)
728x90