๋ฌธ์
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. stack์ด ๋น์ด์๋ค๋ฉด ์ ํธ๋ฅผ ๋ฐ์ ํ์ด ์กด์ฌํ์ง ์๋๋ค. -> ๊ฒฐ๊ณผ : 0
2. stack์ top๋ณด๋ค ๋น๊ตํ๋ ํ์ ๋์ด๊ฐ ๋ฎ๋ค๋ฉด ์ ํธ๋ฅผ ๋ฐ๋ ํ์ ํ์ฌ stack์ top์ด๊ณ , ๋น๊ตํ๋ ํ๋ stack์ pushํ๋ค.
3. stack์ top๋ณด๋ค ๋น๊ตํ๋ ํ์ ๋์ด๊ฐ ๋๋ค๋ฉด stack์ ์๋ ๋ชจ๋ ํ๋ค๊ณผ ๋์ด๋ฅผ ๋น๊ตํด๋ณธ๋ค. stack์ด empty๊ฐ ๋๋ฉด ์ ํธ๋ฅผ ๋ฐ์ ํ์ด ์กด์ฌํ์ง ์์์ผ๋ก -> ๊ฒฐ๊ณผ : 0
ํด๋น ์ค๋ช ์ ๊ฐ๋จํ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋๊ฒ ์ดํด๊ฐ ๋ ์ ๋ ๊ฒ ๊ฐ๋ค.
#include <iostream>
#include <stack>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
stack<pair<int, int>> s;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
while (!s.empty()) { // ๋น๊ตํ ํ์ด ์๋ค๋ฉด
if (tmp < s.top().second) { // ํ์ฌ top๋ณด๋ค ์๋ค๋ฉด
cout << s.top().first+1 << " ";
s.push({ i,tmp }); // ํน์ ์ด๋ฒ ํ๋ณด๋ค ์์ ํ ์์์๋ ์๊ธฐ ๋๋ฌธ์
break;
}
else {
// top ๋ณด๋ค ํ์ฌ ํ์ด ํฌ๋ค๋ฉด
s.pop(); // ๋ค์ ํ ๋น๊ต
}
}
if (s.empty()) { // ์์ ๋ฐ์ ํ์ด ์์ผ๋ฉด
cout << "0 ";
s.push({ i,tmp }); // ํ์ฌ ํ ๋ฃ๊ธฐ
}
}
}