반응형
문제
https://www.acmicpc.net/problem/2559
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
코드
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
nums = list(map(int, input().split()))
part_sum = sum(nums[:k])
max_sum = part_sum
for i in range(k, n):
part_sum += nums[i] - nums[i - k]
max_sum = max(part_sum, max_sum)
print(max_sum)
설명
처음에는 간단하게 인덱스로 구해서 각 구간의 합을 정하고 최댓값을 출력하려고 했으나 시간초과 발생.
슬라이딩 윈도우라는 알고리즘을 이용해서 해결했다.
이 문제의 경우 더하는 부분이 크게 변하지 않는다.
예를 들어 0번부터 5번까지의 인덱스를 더해서 계산을 했으면,
다음 합을 계산할 때는 1번부터 6번까지를 계산하게 된다.
이때, 1번부터 5번의 값은 그대로 유지하고
0번을 빼주고 6번을 더해준다면 조금 더 빠르게 구할 수 있다.
이를 구현해서 계산한 코드이다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 1541: 잃어버린 괄호 (0) | 2023.07.05 |
---|---|
[파이썬, Python] 백준 3273: 두 수의 합 (0) | 2023.07.04 |
[파이썬, Python] 백준 2776: 암기왕 (0) | 2023.06.30 |
[파이썬, Python] 백준 10974: 모든 순열 (0) | 2023.06.29 |
[파이썬, Python] 백준 9372: 상근이의 여행 (0) | 2023.06.28 |