๐Ÿ• Baaaaaarking/0x05๊ฐ• - ์Šคํƒ

[BOJ G4][C++] ๋ฐฑ์ค€ 17298๋ฒˆ: ์˜คํฐ์ˆ˜

์„ ๋‹ฌ 2022. 2. 13. 19:54
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ N์ธ ์ˆ˜์—ด A = A1, A2, ..., AN์ด ์žˆ๋‹ค. ์ˆ˜์—ด์˜ ๊ฐ ์›์†Œ Ai์— ๋Œ€ํ•ด์„œ ์˜คํฐ์ˆ˜ NGE(i)๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Ai์˜ ์˜คํฐ์ˆ˜๋Š” ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฉด์„œ Ai๋ณด๋‹ค ํฐ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์˜คํฐ์ˆ˜๋Š” -1์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A = [3, 5, 2, 7]์ธ ๊ฒฝ์šฐ NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1์ด๋‹ค. A = [9, 5, 4, 8]์ธ ๊ฒฝ์šฐ์—๋Š” NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ด N๊ฐœ์˜ ์ˆ˜ NGE(1), NGE(2), ..., NGE(N)์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์–˜๋Š” ์ข€ ๋‹ค๋ฅธ๊ฒŒ ์ž…๋ ฅ์„ ๋ฏธ๋ฆฌ ๋ฐ›๊ณ  ์ž…๋ ฅ๊ฐ’๋“ค์„ >๋’ค์—์„œ๋ถ€ํ„ฐ< ๊บผ๋‚ด์•ผ ํ•œ๋‹ค

๊ทธ๋ฆฌ๊ณ  ๊บผ๋‚ธ๊ฐ’์„ ์Šคํƒ์— ์ง‘์–ด๋„ฃ์œผ๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์Šคํƒ์— ์žˆ๋Š” ์ˆ˜๋“ค์€ ์ž์‹ ์˜ >์˜ค๋ฅธ์ชฝ ์ˆ˜<๊ฐ€ ๋จ

 

์ด์ œ ์Šคํƒ์— ์žˆ๋Š” ๊ฐ’์ด

์ž์‹ ๋ณด๋‹ค ์ž‘๋‹ค -> ์˜คํฐ์ˆ˜ ์กฐ๊ฑด์— ์•ˆ๋งž์œผ๋ฏ€๋กœ ๊ทธ๋ƒฅ pop

์ž์‹ ๋ณด๋‹ค ํฌ๋‹ค -> ์˜คํฐ์ˆ˜ ์กฐ๊ฑด์— ๋งž์œผ๋ฏ€๋กœ ์ถœ๋ ฅ๊ฐ€๋Šฅ

 

์ด๋•Œ, ์ถœ๋ ฅ์€ ์™ผ์ชฝ๋ถ€ํ„ฐ ๊ฐ€์•ผํ•˜๋ฏ€๋กœ ๋‹ต๋“ค์„ ๋ฒกํ„ฐ์— ์ €์žฅํ•˜๊ณ 

์ถœ๋ ฅํ• ๋•Œ ํ•ด๋‹น ๋‹ต๋ฒกํ„ฐ๋ฅผ ์—ญ์œผ๋กœ ์ถœ๋ ฅํ–ˆ๋‹ค

 

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <stack>
#include <vector>

using namespace std;

stack <int> s;
vector <int> input;
vector <int> ans;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    // ์ž…๋ ฅ
    int n;
    cin >> n;
    
    for(int i=0; i<n; i++){
        int tmp;
        cin >> tmp;
        input.push_back(tmp);
    }
    
    // ๊ณ„์‚ฐ
    for(int i=n-1; i>=0; i--){
        while(!s.empty() && s.top() <= input[i]) {
            s.pop();
        }
        
        if(s.empty()) {
            ans.push_back(-1);
            s.push(input[i]);
            continue;
        }
        
        ans.push_back(s.top());
        s.push(input[i]);
    }
    
    // ์ถœ๋ ฅ
    for(int i=n-1; i>=0; i--){
        cout << ans[i] << " ";
    }
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•