알고리즘/BOJ

[c/c++] BOJ 17298번 문제 - 오큰수

wonjun.Aden 2022. 2. 25. 19:16

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

 

17298번: 오큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

문제

문제풀이

#include <bits/stdc++.h>
using namespace std;

//오큰수
//Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미
//그러한 수가 없는 경우에 오큰수는 -1
int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(0);
    stack<int> st;
    vector<int> vc;
    int answer[1000001]={0,};
    int n;
    cin >> n;

    for(int i=0;i<n;i++){
        int input;
        cin >>input;
        vc.push_back(input);
    }
    //역순으로
    for(int i=n-1;i>=0;i--){
        while(!st.empty() && st.top() <= vc[i]){
            st.pop();
        }
        if(st.empty()){
            answer[i] = -1;
            //cout << -1 <<' ';
        }else{
            answer[i] = st.top();
            //cout << st.top()<<' ';
        }
        st.push(vc[i]);
    }
    for(int i =0;i<n;i++){
        cout << answer[i] <<' ';
    }
  
}

문제의 포인트

  • 역순으로 생각하기
  • 스택의 gold 문제들이 몇몇(2493,6198,...)이 유사한 형태를 가지고 있음.
반응형