< [C++/백준 17298번] 오등큰수

프로그래밍 공부/백준 (C++)

[C++/백준 17298번] 오등큰수

Rocketbabydolls 2024. 10. 24. 13:14

 

 

#include <iostream>
#include <stack>
#include <sstream>

using namespace std;

int main() {

    int N;

    int* arr;
    int* NGF;

    cin >> N;

    arr = new int[N+1];
    int cntarr[1000001] = {0,};
    NGF = new int[N+1];

    for(int i = 1 ; i <= N ; i++) NGF[i] = -1;

    for(int i = 1; i <= N; i++)
    {
        int input;
        cin >> input;
        arr[i] = input;
        cntarr[input] += 1;
    }

    stack <int> s;

    for(int i = 1; i <= N; i++)
    {
        while(!s.empty() && cntarr[arr[s.top()]] <  cntarr[arr[i]] )
        {
            NGF[s.top()] = arr[i];
            s.pop();
        }

        s.push(i);

        //cout << "i = " << i;
        //for(int i = 1 ; i <= N ; i++)
         //   cout << NGF[i] << " ";

      //  cout << endl;

    }


    for(int i = 1 ; i <= N ; i++)
        cout << NGF[i] << " ";



    delete[] NGF;
    delete[] arr;

    return 0;
}