공부 자료/알고리즘

(Python/파이썬) 백준 12847번 - 꿀 아르바이트

뚜루뚜루세니 2021. 9. 3. 22:48
728x90

문제출처: https://www.acmicpc.net/problem/12847

 

12847번: 꿀 아르바이트

월세를 내기 바로 전 날 까지 인 n (0 < n ≤ 100,000) 일과 일을 할 수 있는 날 m (0 ≤ m ≤ n) 일이 주어진다. 그 다음 줄 에는 1일부터 n일 까지 일급 Ti가 순서대로 주어진다. (0 < Ti ≤ 1,000,000)

www.acmicpc.net

1. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
input = sys.stdin.readline
 
n,m = map(int, input().split())
money = list(map(int,input().split()))
 
work = m #일할 수 있는 날
search = sum(money[:work]) #일할 수 있는 날만큼의 합
ans = search
 
#처음에 처음부터 m개의 수를 더함
#인덱스 m부터 n까지 순차적으로 탐색
#현재 나오는 수를 search에 더함 -> search에 맨 처음에 더한 값 뺌
#현재 ans와 비교 -> ans 갱신
 
for i in range(work, n):
    search += money[i] - money[i-work]
    ans = max(ans, search)
 
print(ans)
cs

2. 해결과정

특정 구간의 합 중에 최댓값을 구하는 문제였다.

처음부터 M개의 원소를 더한 다음 M+1부터 탐색을 진행한다.

탐색하면서 현재 나오는 숫자를 더하고 이미 더한 숫자 중 처음 값을 빼서 최댓값을 비교해주고, 갱신하여 출력해주면 된다.

 

 

728x90