슬라이딩 윈도우. dp의 방식을 차용하되 2칸만 유지해 메모리 효율을 최고로 끌어올림.
import sys
input = sys.stdin.readline
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
max_sum = [[0,0,0],[0,0,0]]
min_sum = [[0,0,0],[0,0,0]]
# 슬라이딩 윈도우 N까지 미끄러짐. // dp를 같이 쓰는데 dp를 모두 저장하는 것이 아니라 전의 값과 현재 계산할 칸만 남겨둠.
for i in range(0,N):
max_sum[1][0] = max(max_sum[0][1], max_sum[0][0]) + arr[i][0]
max_sum[1][1] = max(max_sum[0][1], max_sum[0][2], max_sum[0][0]) + arr[i][1]
max_sum[1][2] = max(max_sum[0][1], max_sum[0][2]) + arr[i][2]
min_sum[1][0] = min(min_sum[0][0], min_sum[0][1]) + arr[i][0]
min_sum[1][1] = min(min_sum[0][1], min_sum[0][2], min_sum[0][0]) + arr[i][1]
min_sum[1][2] = min(min_sum[0][1], min_sum[0][2]) + arr[i][2]
max_sum.append(max_sum.pop(0))
min_sum.append(min_sum.pop(0))
print(max(max_sum[0]), min(min_sum[0]))
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 18808 스티커 붙히기 (0) | 2021.08.11 |
---|---|
[백준][Python] 20364 부동산 다툼. (1) | 2021.08.11 |
[백준][Python] 15961 회전초밥 : 슬라이딩 윈도우 연습 (0) | 2021.08.11 |
[백준][Python] 6549 히스토그램에서 가장 큰 직사각형 (0) | 2021.08.10 |
[백준][Python] 1725 히스토그램 : stack (0) | 2021.08.10 |