코딩 테스트/백준

[Python] 백준 2559 수열

위시리 2025. 1. 9. 14:31


문제 분석

  • 정수 수열에 대해 어느 기간 동안의 온도 합이 가장 큰지 확인

 

코드 설계

2차

  • 제일 큰 수를 찾고 그 큰 수를 둘러싼 값 확인

 

정답 코드

1차 - 시간초과

import sys
input = sys.stdin.readline

n,k = map(int, input().split())
temp = list(map(int, input().split()))
s = 0
res = []

while s+k <= n:
    res.append(sum(temp[s:s+k]))
    s += 1
print(max(res))

 

2차 - 시간 초과

import sys
input = sys.stdin.readline

n,k = map(int, input().split())
temp = list(map(int, input().split()))
idx = temp.index(max(temp))
s = idx-k
res = []

while s+k <= n :
    res.append(sum(temp[s:s+k]))
    s += 1
print(max(res))

 

3차 - 런타임 에러

시간 효율을 위해 i번째 범위 합은 i-1번째 범위합에서 왼쪽 끝을 빼고 오른쪽 끝을 더해준다. (슬라이딩 윈도우)

import sys
input = sys.stdin.readline

n,k = map(int, input().split())
temp = list(map(int, input().split()))
idx = temp.index(max(temp))
s = idx-k+1
before = temp[s : s+k]
ans = [sum(before)]

while s+k < n:
    before.pop(0)
    after = before + [temp[s+k]]
    ans.append(sum(after))
    s += 1
    before = after

print(max(ans))

 

다른 사람 코드 1

import sys
input = sys.stdin.readline

n,k = map(int, input().split())
temp = list(map(int, input().split()))

part_sum = sum(temp[:k])
ans = part_sum

for i in range(n-k) :
    part_sum += temp[i+k] - temp[i]
    if ans < part_sum :
        ans = part_sum

print(ans)

 

다른 사람 풀이 2

N, K = map(int, input().split())
tem_list = list(map(int, input().split()))

part_sum = sum(tem_list[:K])
result_list = [part_sum]

for i in range(0, len(tem_list)-K):
    part_sum = part_sum - tem_list[i] + tem_list[i+K]
    result_list.append(part_sum)

print(max(result_list))