정화 코딩

[C++] Gazzzua (백준 17939번) 본문

PS

[C++] Gazzzua (백준 17939번)

jungh150c 2024. 7. 21. 15:59

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

 

#include <iostream>
#include <vector>
using namespace std;

int n;
vector<int> c;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n;
    c = vector<int>(n);
    for (int i = 0; i < n; i++) cin >> c[i];

    int ans = 0;
    int s = 0;
    int e = c.size();
    while (s < e) {
        int maxv = 0;
        int maxi = -1;
        for (int i = s; i < e; i++) {
            if (c[i] >= maxv) {
                maxv = c[i];
                maxi = i;
            }
        }
        for (int i = s; i < maxi; i++) {
            ans -= c[i];
        }
        ans += maxv * (maxi - s);
        s = maxi + 1;
    }

    cout << ans << '\n';
}

일단 처음에는 전체 구간에서 최댓값을 찾고, 최대 전까지 계속 사다가 최대인 지점에서 다 팔았다. 그리고 구간을 최대 지점을 기준으로 잘라 뒷부분으로 줄이고 다시 반복하고... 구간의 길이가 1이 될 때까지 반복했다. 그리디 알고리즘 문제였다. (정답)

 


 

오랜만에 랜디했다. 실2~골5로 했다. 랜디 딱 돌리고 보니까 제목이 영어라서 윽 영어문제?! 넘길까?? 했는데 문제만 영어였다. 문제 풀고 제목을 다시 읽어보기 가주아 ㅋㅋㅋ 요즘 엘리스 푸느라 하루의 PS 에너지를 다 써서 백준 스트릭은 항상 쉬운걸로 풀었다. 따라서 매우 오랜만에 쓰는 글.. 엘리스 복기 글도 써야겠다.

 

Comments