728x90
> 파이썬, 누적 합, 슬라이딩 윈도우
📖 문제 : 블로그 (Python)
찬솔이는 블로그를 시작한 지 벌써 일이 지났다.
요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다.
찬솔이는 일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.
찬솔이를 대신해서 일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자.
입력
첫째 줄에 블로그를 시작하고 지난 일수 와 가 공백으로 구분되어 주어진다.
둘째 줄에는 블로그 시작 일차부터 일차까지 하루 방문자 수가 공백으로 구분되어 주어진다.
출력
첫째 줄에 일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.
만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다.
제한
- 1 ≤ X ≤ N ≤ 250,000
- 0 ≤ 방문자 수 ≤ 8,000
예제 입력 1
5 2
1 4 2 5 1
예제 출력 1
7
1
내 코드
N, X = map(int, input().split())
numbers = list(map(int, input().split()))
maxN, cnt = sum(numbers[0:X]), 1
sumN = maxN
for i in range(1, len(numbers)-X+1):
sumN = sumN - numbers[i-1] + numbers[i+X-1]
if sumN > maxN:
maxN = sumN
cnt = 1
elif sumN == maxN:
cnt += 1
if maxN == 0:
print("SAD")
else:
print(maxN)
print(cnt)
Point ! ⭐️
- 길이가 X인 슬라이딩 윈도우를 구현하였지만, 여기서는 시간을 줄이기 위해서 길이가 X인 모든 수를 그때마다 sum함수를 사용해 더해주는 것이 아닌, 윈도우가 +1씩 이동하는 것이므로
처음 합만 구한 후 빠지는 수만 빼주고 그 다음수만 더해주면서 두 개의 값만 계속 빼고 더하는 방식으로 구현하였습니다.
백준
https://www.acmicpc.net/problem/21921
728x90
'Algorithm (Python, Java, SQL) > BaekJoon' 카테고리의 다른 글
[백준 15724번] 주지수 (Java) (2) | 2024.01.30 |
---|---|
[백준 3190번] 뱀 (Java) (0) | 2024.01.18 |
[백준 1515번] 수 이어쓰기 (Python) (1) | 2023.11.13 |
[백준 1863번] 스카이라인 쉬운거 (Python) (0) | 2023.11.13 |
[백준 2636번] 치즈 (Python) (0) | 2023.10.24 |