알고리즘/백준

[백준 2096] 내려가기 C++

겜도리도리 2021. 11. 22. 22:06
반응형

문제

백준 2096 내려가기 C++

 

2096번: 내려가기

첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.

www.acmicpc.net

풀이

Max, Min 값 등을 배열로 정리했으면 더 깔끔한 코드가 나왔을 것 같다.

메모리 초과에 유의하여 10만 크기의 배열을 선언하지않고, 전 단계 값만 저장하면서 갱신해준다.

소스 코드

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
37
38
39
40
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int N;
    cin >> N;
    int a, b, c;
    cin >> a >> b >> c;
    // 지금까지의 최대, 최소
    int aMax = a, bMax = b, cMax = c;
    int aMin = a, bMin = b, cMin = c;
    // 다음 최대, 최소
    int aMaxNext, bMaxNext, cMaxNext;
    int aMinNext, bMinNext, cMinNext;
    for (int i = 1; i < N; i++) {
        cin >> a >> b >> c;
        // 최댓값 갱신
        aMaxNext = max(aMax, bMax) + a;
        bMaxNext = max(max(aMax, bMax), cMax) + b;
        cMaxNext = max(bMax, cMax) + c;
        aMax = aMaxNext;
        bMax = bMaxNext;
        cMax = cMaxNext;
        // 최솟값 갱신
        aMinNext = min(aMin, bMin) + a;
        bMinNext = min(min(aMin, bMin), cMin) + b;
        cMinNext = min(bMin, cMin) + c;
        aMin = aMinNext;
        bMin = bMinNext;
        cMin = cMinNext;
    }
    int Max = max(max(aMax, bMax), cMax);
    int Min = min(min(aMin, bMin), cMin);
    cout << Max << ' ' << Min;
    return 0;
}
cs
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 13913] 숨바꼭질 4 C++  (0) 2021.11.24
[백준 1715] 카드 정렬하기 C++  (0) 2021.11.22
[백준 1339] 단어 수학 C++  (0) 2021.11.15
[백준 1405] 미친 로봇 C++  (0) 2021.11.15
[백준 2023] 신기한 소수 C++  (0) 2021.11.10