블로그

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

+ Recent posts