Algorithm&CodingTest/Baekjoon
[Baekjoon] [21921] 실버3 - 블로그 Python
kitez
2024. 1. 31. 14:00
블로그
https://www.acmicpc.net/problem/21921
21921번: 블로그
첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다
www.acmicpc.net
내 코드
시간초과 코드
시간초과 났던 이유
- 인덱싱 + sum 함수사용
- 처음 0~X일까지의 구간합을 구한 다음 거기에 다음 인덱스에서 필요한 값을 빼고, 더해주는 방식으로 수정
from sys import stdin
N, X = map(int, stdin.readline().split())
visited = list(map(int, stdin.readline().split()))
maxVisit = 0
maxVisitCount = 0
for i in range(N - X + 1):
sliceVisit = visited[i: i+X]
if maxVisit < sum(sliceVisit):
maxVisit = sum(sliceVisit)
maxVisitCount = 1
elif maxVisit == sum(sliceVisit):
maxVisitCount += 1
else:
pass
if maxVisit == 0:
print("SAD")
else:
print(maxVisit)
print(maxVisitCount)
성공 코드
from sys import stdin
N, X = map(int, stdin.readline().split())
visited = list(map(int, stdin.readline().split()))
intervalSum = sum(visited[0: X])
maxVisit = intervalSum
maxVisitCount = 1
for i in range(1, N - X + 1):
intervalSum = intervalSum - visited[i-1] + visited[i+X-1]
if intervalSum > maxVisit:
maxVisit = intervalSum
maxVisitCount = 1
elif intervalSum == maxVisit:
maxVisitCount += 1
if maxVisit == 0:
print("SAD")
else:
print(maxVisit)
print(maxVisitCount)
728x90