[백준] #2559 수열 python

2023. 1. 13. 06:00

https://www.acmicpc.net/problem/2559

 

2559번: 수열

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기

www.acmicpc.net

📕 설명 📕

이 코드와 같이 모든 구간의 합을 list에 넣고 max함수를 사용하여 구하였더니 시간초과가 발생했다 !

N, M = map(int, input().split())
N_list = list(map(int, input().split()))
tmp = 0
tmp_val = []
for i in range(N - M + 1):
    tmp_val.append(sum(N_list[i:i+M]))
print(max(tmp_val))

그래서 ! 다른 방법을 찾아보기로 했다.

 

먼저,

 

sum 함수로 리스트의 0번째 index부터 M번째 index까지의 합을 리스트에 저장한다.

 

그리고 다시 하나씩 for문을 돌며 맨 앞 값 이전 값을 빼주고, 새로 추가된 값을 더하는 방식으로 한다.

 

코드는 아래와 같다.

 

🧑🏻‍💻 나의 풀이 🧑🏻‍💻

N, M = map(int, input().split())
N_list = list(map(int, input().split()))
tmp = 0
tmp_val = [sum(N_list[:M])]
for i in range(1,N - M + 1):
    tmp_val.append(tmp_val[i-1] - N_list[i-1] + N_list[i + M - 1])
print(max(tmp_val))

 

BELATED ARTICLES

more