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

이수진·2022년 1월 11일
0
post-thumbnail
post-custom-banner

문제링크: https://www.acmicpc.net/problem/17299

문제는 다음과 같습니다.

전에 풀었던 오큰수와 거의 비슷하고 살짝 응용된 정도라고 볼 수 있습니다.
스택에 저장해야하는 값이 다를 뿐, 원리는 같은 문제라고 생각합니다!

먼저 제 코드는 다음과 같습니다.

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

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, tmp;
    stack<int> s;
    vector<int> v, res; // res: 결과벡터
    int f[1000001]={0, };
    cin>>n;

    for(int i=0; i<n; i++){
        cin>>tmp;
        v.push_back(tmp);
        f[tmp]++;
    }
    reverse(v.begin(), v.end());

    for(int i=0; i<v.size(); i++){
        if(s.empty()){
            res.push_back(-1);
        }
        else{
            // !s.empty()인 경우
            while(!s.empty() && f[v[i]]>=f[s.top()]){
                s.pop();
            }

            if(s.empty()) res.push_back(-1);
            else res.push_back(s.top());
        }
        
        s.push(v[i]);
    }

    reverse(res.begin(), res.end());
    for(int i=0; i<res.size(); i++) cout<<res[i]<<" ";
    cout<<endl;
    return 0;
}

다른 사람들의 풀이도 좀 살펴봤는데요,
거의 다 비슷하더라구요, 그래서 이문제도 그냥 넘어가겠습니다!

profile
꾸준히, 열심히, 그리고 잘하자
post-custom-banner

0개의 댓글