반응형
https://www.acmicpc.net/problem/12847
12847번: 꿀 아르바이트
월세를 내기 바로 전 날 까지 인 n (1 ≤ n ≤ 100,000) 일과 일을 할 수 있는 날 m (0 ≤ m ≤ n) 일이 주어진다. 그 다음 줄 에는 1일부터 n일 까지 일급 Ti가 순서대로 주어진다. (0 < Ti ≤ 1,000,000)
www.acmicpc.net
내 코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
day = list(map(int, input().split()))
window = sum(day[:m])
cnt =0
ans = window
for i in range(m, n):
window += day[i] - day[i-m]
if window > ans:
ans = window
print(ans)
코드 리뷰
슬라이딩 윈도우
이 문제는 슬라이딩 윈도우의 개념을 학습할 때 풀기 좋은 문제이다.
심지어 문제에서 묻는 것이 카운팅하는 것조차 없고, 단순히 부분 합을 요구한다.
for i in range(m, n):
window += day[i] - day[i-m]
if window > ans:
ans = window
그래서 나는 이 문제를 풀 때 윈도우를 하나 만들어놓고, 옆으로 옮기면서 진행했다.
그리고 옮길 때마다 이전까지의 최댓값과 비교하면서, 만약 현재의 부분 값이 더 클 경우 정답으로 저장하도록 했다.
마지막으로 ans에 저장된 값(최댓값)을 출력하면 된다.
반응형
'코딩테스트 대비 > 백준(BOJ)' 카테고리의 다른 글
| [Python][백준/BOJ] 10025번 : 게으른 백곰 (0) | 2023.08.02 |
|---|---|
| [Python][백준/BOJ] 2559번 : 수열 (0) | 2023.08.02 |
| [Python][백준/BOJ] 2003번 : 수들의 합 2 (0) | 2023.08.02 |
| [Python][백준/BOJ] 12891번 : DNA 비밀번호 (0) | 2023.08.01 |
| [Python][백준/BOJ] 21921번 : 블로그 (0) | 2023.08.01 |