[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을 새로 구하는 방식과, 겹치는 부분을 제외하고 더하고 빼는 방식에 대해 깨닫게 되었다. 앞의 방식을 처음에 떠올렸는데, 비효율적이라는 사실을 깨닫고, 뒤의 방식이 시간적인 측면에서도 더 효율적이라는 것을 알 수 있었다.

좋은 웹페이지 즐겨찾기