[BOJ]17298 오큰수

강동현·2023년 12월 9일
0

코딩테스트

목록 보기
7/111
  • 오른쪽이 큰 수를 찾는 문제
  • 값을 저장하고 오른쪽부터 처리해준다.
  • 스택의 top()이 현재 다루는 값보다 클 때까지 stk.pop()을 수행한다.
  • stk.empty()라면 해당 위치에 -1을, 아니라면 stk.top()값을 넣어주고, 현재 값을 스택에 넣는다.
  • 최종적으로 ans 배열에 저장된 값을 차례대로 출력하면 됨
#include <bits/stdc++.h>
using namespace std;
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int N, val;
    cin >> N;
    stack<int> stk;
    vector<int> vec(N, 0);
    vector<int> ans(N, -1);
    for(int i = 0; i < N; ++i) cin >> vec[i];
    for(int i = N-1; i >= 0; --i){
        while(!stk.empty() && stk.top() <= vec[i]) stk.pop();
        if(stk.empty()) ans[i] = -1;
        else ans[i] = stk.top();
        stk.push(vec[i]);
    }
    for(int i = 0; i < N; ++i) cout << ans[i] << ' ';
    return 0;
}
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글