코딩캠프/BOJ
[2096] 내려가기
by 코곰_
2024. 2. 14.
// 2096 내려가기 - 못 ㅜ품
// DP, 메모리 최적화
#include <bits/stdc++.h>
using namespace std;
int n;
int DMIN[2][3] = {0, }; //
int DMAX[2][3] = {0, }; //
int A[3]; //
int a, b, c;
int minn, maxx;
// n은 90미만 정수
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n; // 100,000 -> 입력이 큰데 비해 메모리는 4MB
// 초기화
for(int i=0; i<2; i++){ // 행
for(int j=0; j<3; j++){ // 열
DMIN[i][j] = 0;
DMAX[i][j] = 0;
}
}
for(int i=0; i<n; i++){
cin >> a >> b >> c;
A[0] = a;
A[1] = b;
A[2] = c;
DMIN[i%2][0] = min(DMIN[(i+1)%2][0], DMIN[(i+1)%2][1]) + A[0];
DMIN[i%2][1] = min(min(DMIN[(i+1)%2][0], DMIN[(i+1)%2][1]), DMIN[(i+1)%2][2]) + A[1];
DMIN[i%2][2] = min(DMIN[(i+1)%2][1], DMIN[(i+1)%2][2]) + A[2];
DMAX[i%2][0] = max(DMAX[(i+1)%2][0], DMAX[(i+1)%2][1]) + A[0];
DMAX[i%2][1] = max(max(DMAX[(i+1)%2][0], DMAX[(i+1)%2][1]), DMAX[(i+1)%2][2]) + A[1];
DMAX[i%2][2] = max(DMAX[(i+1)%2][1], DMAX[(i+1)%2][2]) + A[2];
}
maxx = max(max(DMAX[(n-1)%2][0], DMAX[(n-1)%2][1]), DMAX[(n-1)%2][2]);
minn = min(min(DMIN[(n-1)%2][0], DMIN[(n-1)%2][1]), DMIN[(n-1)%2][2]);
cout << maxx << " " << minn;
return 0;
}