백준 [17298] "오큰수"

Kimbab1004·2024년 7월 17일
0

Algorithm

목록 보기
52/102

문제와 상당히 유사했던 문제.

Stack과 index를 결합해서 사용해야 해결할 수 있었던 문제였다.

#include <iostream>
#include <vector>
#include <queue>
#include <stack>

#define endl "\n"

using namespace std;
int n,a;
stack<pair<int,int>> q;
int s = 0;

int main() {

    cin >> n;
    vector<int> result(n, -1);
    if (n == 1) {
        cout << -1 << endl;
        return 0;
    }
    else {
        cin >> a;
        q.push({ a,0 });
        for (int i = 1; i < n; i++) {
            cin >> a;
            if (a < q.top().first) q.push({a,i});
            else {
                while (!q.empty() && a > q.top().first) {
                    result[q.top().second] = a;
                    q.pop();
                }
                q.push({ a ,i});
            }
       }
    }

    for (int i = 0; i < n; i++) {
        cout << result[i] << " ";
    }
   
    return 0;
}

0개의 댓글