이번 문제는 다이나믹 프로그래밍을 통해 해결하였다. 처음에는 주어진 2차원 배열을 만든 뒤에 내려가며 최대와 최소에 해당하는 수들을 각각 저장하여 해결해야겠다고 생각을 했다. 하지만 그렇게 되면 입력값이 너무 많아져 메모리 제한을 초과한다는 사실을 알게 되었다. 그래서 각 줄을 입력 받을 때 마다 누적값의 최대와 최소를 구하여 저장해놓는 방식으로 구현하였다.
n=int(input())
maxDP=[0]*3
minDP=[0]*3
maxTemp=[0]*3
minTemp=[0]*3
for i in range(n):
num1,num2,num3 = map(int, input().split())
for j in range(3):
if j==0:
maxTemp[j]=num1+max(maxDP[j], maxDP[j+1])
minTemp[j]=num1+min(minDP[j], minDP[j+1])
elif j==1:
maxTemp[j]=num2+max(maxDP[j-1], maxDP[j], maxDP[j+1])
minTemp[j]=num2+min(minDP[j-1], minDP[j], minDP[j+1])
else:
maxTemp[j]=num3+max(maxDP[j-1], maxDP[j])
minTemp[j]=num3+min(minDP[j-1], minDP[j])
for j in range(3):
maxDP[j]=maxTemp[j]
minDP[j]=minTemp[j]
print(max(maxDP), min(minDP))