
문제 해석
입력
출력
아이디어
필요 변수
내 코드
# 입력받기
for tc in range(1, int(input())+1):
N, M = map(int, input().split())
Arr = list(map(int, input().split()))
tmpSum = []
# 배열 순회
for i in range(N-M+1):
tmpSum.append(sum(Arr[i:i+M]))
print(f'#{tc} {max(tmpSum) - min(tmpSum)}')
피드백
"코드가 간결하고 이해하기 좋은데요. 배열 크기가 작을 때는 상관이 없는데 배열 크기가 커질 수록 계속 구간마다 새롭게 값을 더해줘야해서 시간이 오래 걸릴 수 있는 구조입니다."
→ 내 코드는 1,2,3 / 2,3,4 / 3,4,5 / .... 이런 식으로 계한하기 때문에 구간합 구할 때 중복되는 요소가 존재한다.. 1,2,3 구한 후 1 날리고, 4만 추가한다면 시간 절약 가능하다는 의미!
피드백 코드
for tc in range(1, int(input())+1):
N, M = map(int, input().split())
Arr = list(map(int, input().split()))
# 배열 순회
s, e = 0, M-1
min_sum = sum(Arr[:M+1])
max_sum = min_sum
cur_sum = min_sum
s += 1
e += 1
while e < N :
cur_sum = cur_sum - Arr[s-1] + Arr[e]
max_sum = max(cur_sum, max_sum)
min_sum = min(cur_sum, min_sum)
s += 1
e += 1
print(f'#{tc} {max_sum - min_sum}')