728x90

백준 21921 - 블로그

시간 제한 1초, 메모리 제한 512MB

# 조건

  • 찬솔이는 블로그를 시작한 지 벌써 $N$일이 지났다.
  • 요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다.
  • 찬솔이는 $X$일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.
  • 찬솔이를 대신해서 $X$일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자.

# 접근 방법

  • 누적 합을 구해준 후 x일만큼의 방문자 수로 기록해준다.
    • 만약 x가 2이고 [1, 2, 3, 4, 5]의 방문자 수가 있다면 누적 합 [1, 3, 6, 10, 15]를 구해주고 기간마다의 합을 구해준다.
    • [0, 4, 5, 7, 9]를 구한 후 최댓 값과 카운트를 구해준다.
import sys  
sys.stdin = open('input.txt')  
input = sys.stdin.readline  

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

sum_val = [0] * N  
sum_val[0] = nums[0]  

for i in range(1, N):  
    sum_val[i] = sum_val[i-1] + nums[i]  

left = 0  
can_val = []  
for i in range(X-1, N):  
    if not left == 0:  
        can_val.append(sum_val[i] - sum_val[left-1])  
    else:  
        can_val.append(sum_val[i])  
    left += 1  

result = max(can_val)  
if result == 0:  
    print('SAD')  
else:  
    print(result)  
    print(can_val.count(result))
728x90