https://www.acmicpc.net/problem/21921
해결방법
구간 합 중 가장 큰 값이 무엇이며, 그 값이 몇 번 나오는지 파악해야 하는 문제로 누적합과 슬라이딩 윈도우를 이용할 줄 알아야 한다.코드
N, X = map(int, input().split())
arr = list(map(int, input().split()))
prefix = [0]
for i in range(N):
prefix.append(prefix[i] + arr[i])
left = 0
right = X
ans = 0
period = 0
while right <= N:
partSum = prefix[right] - prefix[left]
if ans == partSum:
period += 1
elif ans < partSum:
period = 1
ans = partSum
right += 1
left += 1
print(f"{ans}\n{period}" if ans > 0 else "SAD")
코드 설명
누적합을 담아둘 리스트는 prefix라는 변수에 담는다.left, right는 prefix의 인덱싱을 할 인덱스이다.ans와 period는 출력하려는 답이다.
prefix의 기간(right와 left의 차) 만큼 방문한 수를 계산함으로써 ans, period를 구한다.
'문제 풀이 > 백준' 카테고리의 다른 글
[S2] 백준 1012 - 유기농 배추 (Python3) (0) | 2023.01.15 |
---|---|
[S2] 백준 11568 - 민균이의 계략 (Python3) (0) | 2023.01.15 |
[S4] 백준 4949 - 균형잡힌 세상 (Python3) (0) | 2023.01.14 |
[S5] 백준 26517 - 연속인가? ? (Python3) (1) | 2023.01.10 |
[Python] 백준 5430 - AC (0) | 2022.05.29 |
댓글