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

[BOJ G5][C++] ๋ฐฑ์ค€ 2493๋ฒˆ: ํƒ‘

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

2493๋ฒˆ: ํƒ‘

์ฒซ์งธ ์ค„์— ํƒ‘์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1 ์ด์ƒ 500,000 ์ดํ•˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ํƒ‘๋“ค์˜ ๋†’์ด๊ฐ€ ์ง์„ ์ƒ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์˜ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ํƒ‘๋“ค์˜ ๋†’์ด๋Š” 1

www.acmicpc.net

 

๋ฌธ์ œ

KOI ํ†ต์‹ ์—ฐ๊ตฌ์†Œ๋Š” ๋ ˆ์ด์ €๋ฅผ ์ด์šฉํ•œ ์ƒˆ๋กœ์šด ๋น„๋ฐ€ ํ†ต์‹  ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์‹คํ—˜์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์‹คํ—˜์„ ์œ„ํ•˜์—ฌ ์ผ์ง์„  ์œ„์— N๊ฐœ์˜ ๋†’์ด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ‘์„ ์ˆ˜ํ‰ ์ง์„ ์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ฐจ๋ก€๋กœ ์„ธ์šฐ๊ณ , ๊ฐ ํƒ‘์˜ ๊ผญ๋Œ€๊ธฐ์— ๋ ˆ์ด์ € ์†ก์‹ ๊ธฐ๋ฅผ ์„ค์น˜ํ•˜์˜€๋‹ค. ๋ชจ๋“  ํƒ‘์˜ ๋ ˆ์ด์ € ์†ก์‹ ๊ธฐ๋Š” ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ง€ํ‘œ๋ฉด๊ณผ ํ‰ํ–‰ํ•˜๊ฒŒ ์ˆ˜ํ‰ ์ง์„ ์˜ ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์‚ฌํ•˜๊ณ , ํƒ‘์˜ ๊ธฐ๋‘ฅ ๋ชจ๋‘์—๋Š” ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์žฅ์น˜๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ํƒ‘์—์„œ ๋ฐœ์‚ฌ๋œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋งŒ๋‚˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํƒ‘์—์„œ๋งŒ ์ˆ˜์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด ๋†’์ด๊ฐ€ 6, 9, 5, 7, 4์ธ ๋‹ค์„ฏ ๊ฐœ์˜ ํƒ‘์ด ์ˆ˜ํ‰ ์ง์„ ์— ์ผ๋ ฌ๋กœ ์„œ ์žˆ๊ณ , ๋ชจ๋“  ํƒ‘์—์„œ๋Š” ์ฃผ์–ด์ง„ ํƒ‘ ์ˆœ์„œ์˜ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ(์™ผ์ชฝ ๋ฐฉํ–ฅ)์œผ๋กœ ๋™์‹œ์— ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ๋ฐœ์‚ฌํ•œ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด, ๋†’์ด๊ฐ€ 4์ธ ๋‹ค์„ฏ ๋ฒˆ์งธ ํƒ‘์—์„œ ๋ฐœ์‚ฌํ•œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋Š” ๋†’์ด๊ฐ€ 7์ธ ๋„ค ๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ์„ ํ•˜๊ณ , ๋†’์ด๊ฐ€ 7์ธ ๋„ค ๋ฒˆ์งธ ํƒ‘์˜ ์‹ ํ˜ธ๋Š” ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘์ด, ๋†’์ด๊ฐ€ 5์ธ ์„ธ ๋ฒˆ์งธ ํƒ‘์˜ ์‹ ํ˜ธ๋„ ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ์„ ํ•œ๋‹ค. ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘๊ณผ ๋†’์ด๊ฐ€ 6์ธ ์ฒซ ๋ฒˆ์งธ ํƒ‘์ด ๋ณด๋‚ธ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋Š” ์–ด๋–ค ํƒ‘์—์„œ๋„ ์ˆ˜์‹ ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

ํƒ‘๋“ค์˜ ๊ฐœ์ˆ˜ N๊ณผ ํƒ‘๋“ค์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ๊ฐ์˜ ํƒ‘์—์„œ ๋ฐœ์‚ฌํ•œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์–ด๋Š ํƒ‘์—์„œ ์ˆ˜์‹ ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํƒ‘์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1 ์ด์ƒ 500,000 ์ดํ•˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ํƒ‘๋“ค์˜ ๋†’์ด๊ฐ€ ์ง์„ ์ƒ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์˜ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ํƒ‘๋“ค์˜ ๋†’์ด๋Š” 1 ์ด์ƒ 100,000,000 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง„ ํƒ‘๋“ค์˜ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ๊ฐ์˜ ํƒ‘๋“ค์—์„œ ๋ฐœ์‚ฌํ•œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํƒ‘๋“ค์˜ ๋ฒˆํ˜ธ๋ฅผ ํ•˜๋‚˜์˜ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ํƒ‘์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

(1)

์Šคํƒ์„ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•œ๋‹ค.

 

์ด๋•Œ, ์ˆ˜์‹ ํ•˜๋Š” ํƒ‘์˜ "๋†’์ด"๊ฐ€ ์•„๋‹Œ "๋ช‡๋ฒˆ์งธ์ธ์ง€" ๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—

pair๋ฅผ ์ด์šฉํ•˜์—ฌ ํƒ‘์˜ ๋†’์ด์™€ ๋ฒˆ์งธ์ˆ˜๋ฅผ ์Šคํƒ์— ํ•จ๊ป˜ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.

๋ฒˆ์งธ์ˆ˜๋Š” ํ•ด๋‹น ํƒ‘์„ ์ €์žฅํ• ๋•Œ์˜ i๊ฐ’๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

(2)

๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๋ถ„๊ธฐ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๊ท€์ฐฎ์•„์„œ

์ฒ˜์Œ์— ์—๋ผ์ดํ•˜๊ณ  ๊ฐ€์žฅ ๋†’์€ ํƒ‘ (ํƒ‘ ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’ + 1)์„ 0๋ฒˆ์งธ ํƒ‘์œผ๋กœ ๋„ฃ์–ด๋ฒ„๋ฆผ

๋•๋ถ„์— ์ˆ˜์‹ ํ•  ํƒ‘์ด ์—†๋‹ค๋ฉด (์•ž์— ๋ณธ์ธ๋ณด๋‹ค ํฐ ํƒ‘์ด ์—†๋‹ค๋ฉด) 0์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋จ.

 

(3)

์Šคํƒ ๊ผญ๋Œ€๊ธฐ์— ์žˆ๋Š” ํƒ‘ ๋†’์ด๊ฐ€ ์ž์‹ ๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด ์–ด์ฐจํ”ผ ํ•ด๋‹น ํƒ‘์€ ์ž์‹ ์˜ ์‹ ํ˜ธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ž์‹ ๋ณด๋‹ค ๋†’์€ ํƒ‘์ด ๋ณด์ผ๋•Œ๊นŒ์ง€ popํ•ด์คŒ

 

(4)

์Šคํƒ ๊ผญ๋Œ€๊ธฐ์— ์žˆ๋Š” ํƒ‘ ๋†’์ด๊ฐ€ ์ž์‹ ๋ณด๋‹ค ๋†’๋‹ค๋ฉด ๊ทธ๋ƒฅ push๋˜๋ฉด ๋œ๋‹ค

์ด๋•Œ push ๋˜๊ธฐ ์ „ ๊ทธ ๊ผญ๋Œ€๊ธฐ ํƒ‘์ด ๋ช‡๋ฒˆ์งธ ํƒ‘์ธ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์ž์‹ ๋ณด๋‹ค ๋†’๋‹ค๋Š” ํ•ด๋‹น ํƒ‘์ด ์ž์‹ ์˜ ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ.

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

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

using namespace std;

int main() {

    ios_base::sync_with_stdio(0);  
    cin.tie(0);  
    
    stack < pair<int, int> > s;  //(1)
    s.push({0, 100000001}); //(2)
    
    int n;
    cin >> n;
        
    for(int i=1; i<=n; i++){
        int t;
        cin >> t;
        
        while(s.top().second < t)  //(3)
            s.pop();
        
        cout << s.top().first << " ";
        
        s.push({i, t}); //(4)
    }
    
    return 0;
}

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