[BOJ][Python]수열 #2599
https://www.acmicpc.net/problem/2559
📌풀이
내가 쓴 풀이(실패)
temp_len, days = map(int,input().split())
temp = list(map(int, input().split()))
temp_max = 0
for start_idx in range(temp_len-days+1) :
if sum(temp[start_idx:start_idx+days]) > temp_max :
temp_max = sum(temp[start_idx:start_idx+days])
print(temp_max)
- 처음에 주어진 구간에서의
sum
을 활용하여 코드를 작성하였으나, 시간초과로 문제가 해결되지 않았습니다.
내가 쓴 풀이(성공)
temp_len, days = map(int,input().split())
temp = list(map(int, input().split()))
calc = sum(temp[:days])
temp_max = calc
for start_idx in range(1,temp_len-days+1) :
calc -= temp[start_idx - 1]
calc += temp[start_idx + days -1]
if calc > temp_max :
temp_max = calc
print(temp_max)
- for문에서 값을 비교할 때, 앞의 값을 빼주고, 뒤의 값을 더해주는 방식을 활용하였습니다.
📌후기
계속해서 sum을 새로 구하는 방식과, 겹치는 부분을 제외하고 더하고 빼는 방식에 대해 깨닫게 되었다. 앞의 방식을 처음에 떠올렸는데, 비효율적이라는 사실을 깨닫고, 뒤의 방식이 시간적인 측면에서도 더 효율적이라는 것을 알 수 있었다.
Author And Source
이 문제에 관하여([BOJ][Python]수열 #2599), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mein-figur/BOJPython수열-2599저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)