728x90
#24499
누적합을 이용하여 풀이를 진행하고자 하였다. 누적합은 itertools module에서 accumulate 함수를 import해와서 사용할 수 있다. accumulate 함수의 작동원리를 살펴보면 다음과 같다.
from itertools import accumulate
arr = [1, 2, 3, 4, 5]
result = accumulate(arr)
for sum in result:
print(sum)
"""
output:
1 = 1
3 = 1 + 2
6 = 3 + 3
10 = 6 + 4
15 = 10 + 5
"""
위와 같은 return갑을 내놓는 accumulate 함수를 이용하여 24499번을 풀이하였다.
import sys
from itertools import accumulate #누적합 이용하기 위한 module import
input=sys.stdin.readline #시간초과 방지
num,eat=map(int,input().split()) #파이의 수와 먹을 개수
taste=list(map(int,input().split())) #맛있는 정도 list
sum=[0]+list(accumulate(taste)) # 0을 빼는 상황을 위해 0번 인덱스에 0입력
Max=0 #Max를 0으로 설정하고 반복문 진입
for start in range(num):
#조사 구간이 선형리스트 내부일때
if start+eat<=num:
Max = max(Max, sum[start + eat] - sum[start])
#조사 구간이 선형리스트를 넘을때
else:
Max = max(Max, sum[num] - sum[start] + sum[(start + eat) - num])
print(Max)
조사 구간이 선형리스트 내부일때는 간단하지만 조사구간이 선형리스트를 넘을때는 나눠서 구해주어야한다.
예를들어 파이가 1~8조각이 있을때 3조각을 먹고자하는 상황에 7,8,1번 조각을 조사하고 싶으면 sum[8] - sum[6]으로 7,8번의 맛있음 정도를 더하고 1번조각은 sum[(6+3)-8]을 통해 sum[1]을 구해서 맛있음 정도를 추가로 더해준다.
728x90
'Sketch (Programming Language) > Python' 카테고리의 다른 글
Baekjoon Training #1912 (0) | 2022.12.27 |
---|---|
Baekjoon Training #1931 (0) | 2022.12.26 |
Baekjoon Training #2805 (0) | 2022.11.05 |
Baekjoon Training #1753 (0) | 2022.11.01 |
Baekjoon Training #1012 (0) | 2022.10.01 |