백준 21921 블로그 / python

이유참치·2025년 12월 15일

백준

목록 보기
184/248

문제 : 21921

풀이 point

X일 통틀어 방문한 사람들의 합 중 가장 큰 합을 가진 기간과 합을 구하면 된다.
X일 동안의 누적된 합과 슬라이딩 윈도우를 통해 문제를 해결할 수 있다.

풀이 방법

먼저 X일을 통틀어 방문한 사람들의 합을 구한다. 이때는 이것이 최대 합이며 기간 중 하나이다. 초반 X일 이후 계속해서 X일의 누적합들을 구해나간다. 구한 후 그전에 구했던 최대 합과 같은지 큰지 비교한다.

만약 같다면 기간을 추가한다.(기간 다르게 최대 합이 생긴 것이기 때문)
만약 크다면 최대합을 갱신하고 기간을 초기화한다.(최대합 기간이 새로 생성되었기 때문, 그전 기간들은 의미가 없어짐)

코드

#백준 21921, 블로그

N, X = map(int, input().split())

visiter = list(map(int, input().split()))

maxSum = 0
ran = 1
for i in range(0, X):
    maxSum += visiter[i]

total = maxSum
for i in range(X, len(visiter)):
    total += visiter[i]
    total -= visiter[i-X]
    if total == maxSum:
        ran += 1
    elif total > maxSum:
        maxSum = total
        ran = 1

if maxSum == 0: 
    print("SAD")
    exit()
print(maxSum)
print(ran)
profile
임아리 - 대학생

0개의 댓글