728x90
반응형
백준 수열 파이썬 문제풀이
3 -2 -4 -9 0 3 7 13 8 -3
이런 수의 나열이 있다.
2개씩 짝지어서 합을 구하면
이렇게 나오고, 가장 큰 값은 21이다.
5개씩 하면
이런 식이다.
여러 수열에서 몇 개씩 짝지어서 합을 구할 때 가장 크게 나오는 수가 몇인지 구하는 문제이다.
이 문제는 누적합으로 풀 수 있는데,
예를 들어 누적합 3번째 값에서 누적합 1번째 값을 빼면,
수열 3번째와 2번째 값의 합을 구할 수 있다는 규칙이 생긴다.
이를 이용해서 구현한다.
N,K = map(int, input().split())
numList = list(map(int, input().split()))
prefix = [0 for _ in range(N+1)] # 크기 1 더 긴 배열
for i in range(N):
prefix[i+1] = prefix[i] + numList[i] # 누적합 구하기
answer = []
for i in range(K,N+1):
answer.append(prefix[i]-prefix[i-K])
print(max(answer))
prefix라는 누적합 배열을 만든다.
이때 현재까지 수열의 합을 다음 인덱스에 넣기 때문에 prefix의 길이는 1더 크다.
구한 prefix를, 연속으로 더하는 개수인 K개 전 인덱스의 prefix로 빼면
인덱스 i까지 K개 수열의 합을 구할 수 있다.
하나하나씩 구하고 최댓값을 얻자.
728x90
반응형
'개발 · 컴퓨터공학 > 알고리즘' 카테고리의 다른 글
백준 2304 창고 다각형 파이썬 문제풀이 (python 누적합) (11) | 2024.09.22 |
---|---|
백준 1912 연속합 파이썬 문제풀이 (python 누적합) (16) | 2024.09.21 |
백준 14252 공약수열 파이썬 문제풀이 (python 정수론 최적화) (31) | 2024.09.19 |
백준 2436 공약수 파이썬 문제풀이 (python 정수론 최적화) (37) | 2024.09.18 |
백준 1407 2로 몇 번 나누어질까 파이썬 문제풀이 (python 정수론 최적화) (29) | 2024.09.14 |