본문 바로가기
Sketch (Programming Language)/Python

Baekjoon Training #24499

by 생각하는 이상훈 2022. 11. 9.
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