알고리즘/백준

BOJ 17298. 오큰수

아헿헿헿 2022. 7. 17. 08:54

BOJ 17298. 오큰수

랭크 : 골드4

문제 풀이

문제를 잘못 읽어서 한참 해맸습니다. 그냥 뒤에서 부터 큰 거에서 작은 순으로 스택이 쌓이도록 만들고, 이를 참조해서 값을 배정하도록 하면 됩니다.

#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)

using namespace std;

int N, tmp;
int ans[1'000'001];

int main() {
    fastio;
    cin >> N;
    stack<int> s;
    for (int i = 0; i < N; i++)
        cin >> ans[i];
    for (int i = N - 1; i >= 0; i--)
    {
        while (!s.empty() && s.top() <= ans[i])
            s.pop();
        if (s.empty()) tmp = -1;
        else tmp = s.top();
        s.push(ans[i]);
        ans[i] = tmp;
    }
    for (int i = 0; i < N; i++)
        cout << ans[i] << " ";
}

알고리즘 시간복잡도 공간복잡도
stack $O(N)$ $O(N)$