728x90
반응형
3
1 2 3
4 5 6
4 9 0
1층 : 1 2 3
- 1을 선택했을 때 갈 수 있는 숫자는 => 4 5
- 2를 선택하면 => 4 5 6
- 3을 선택하면 => 5 6
max와 min을 활용해서 값 들을 비교하면서 최대 최소를 구한다.
각 줄에 대해서 계산하면서 넘기므로 O(N)의 시간 / 3의 고정된 크기의 배열을 사용하므로 공간 O(1)
이때 max()안에 3개 이상의 값을 비교할 경우만 {}를 써준다 => 공식 문서에 가보면 기본적으론 2개의 값을 비교하도록 되어 있는데, 3개 이상의 값을 비교하고 싶을 때 아래와 같이 초기화 리스트를 넘겨주라고 작성되어져 있다.
template< class T >
T max( std::initializer_list<T> ilist );
(3) (since C++11)
(constexpr since C++14)
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <stack>
#include <queue>
#include <unordered_set>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N;
cin >> N;
int max_dp[3] = {0, 0, 0};
int min_dp[3] = {0, 0, 0};
for (int i = 0; i < N; i++)
{
int a, b, c;
cin >> a >> b >> c;
int prev_max[3] = {max_dp[0], max_dp[1], max_dp[2]};
int prev_min[3] = {min_dp[0], min_dp[1], min_dp[2]};
max_dp[0] = max(prev_max[0], prev_max[1]) + a;
max_dp[1] = max({prev_max[0], prev_max[1], prev_max[2]}) + b;
max_dp[2] = max(prev_max[1], prev_max[2]) + c;
min_dp[0] = min(prev_min[0], prev_min[1]) + a;
min_dp[1] = min({prev_min[0], prev_min[1], prev_min[2]}) + b;
min_dp[2] = min(prev_min[1], prev_min[2]) + c;
}
cout << max({max_dp[0], max_dp[1], max_dp[2]}) << " " << min({min_dp[0], min_dp[1], min_dp[2]});
return 0;
}
728x90
반응형
'Baekjoon > Gold' 카테고리의 다른 글
Baekjoon 1916.최소 비용 구하기 c++ [Gold V] (0) | 2024.12.13 |
---|