728x90

 0. [c++] 백준


https://www.acmicpc.net/problem/2096


 1. 풀이


코드가 깔끔하지 못하는데, 사실 간단한 문제이다.


계단을 한 계단씩 내려간다고 생각하면서 수를 받아올 때마다 계단 1, 2, 3의 위치에서 최대값, 최소값을 구하는 것이다.


쓸모없는 데이터를 유지하지 않는 것에 주의하면서 설계해보았다.



 2. 소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
#include<vector>
#include<algorithm>
 
using namespace std;
 
int ret_MAX[3];
int ret_MIN[3];
 
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    int N, a, b, c, x, y, z;
    cin >> N;
    cin >> ret_MAX[0>> ret_MAX[1>> ret_MAX[2];
    ret_MIN[0= ret_MAX[0]; ret_MIN[1= ret_MAX[1]; ret_MIN[2= ret_MAX[2];
    for (int i = 1; i < N; i++) {
        cin >> a >> b >> c;
        x = a; y = b; z = c;
        a += max(ret_MAX[0], ret_MAX[1]);
        b += max(max(ret_MAX[0], ret_MAX[1]), ret_MAX[2]);
        c += max(ret_MAX[1], ret_MAX[2]);
        ret_MAX[0= a; ret_MAX[1= b; ret_MAX[2= c;
        
 
        x += min(ret_MIN[0], ret_MIN[1]);
        y += min(min(ret_MIN[0], ret_MIN[1]), ret_MIN[2]);
        z += min(ret_MIN[1], ret_MIN[2]);
        ret_MIN[0= x; ret_MIN[1= y; ret_MIN[2= z;
    }
 
    cout << max(ret_MAX[0], max(ret_MAX[1], ret_MAX[2])) << " " << min(ret_MIN[0], min(ret_MIN[1], ret_MIN[2])) << endl;
 
    return 0;
}
cs


 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts