- toc {:toc}
λ¬Έμ
μ€ν (stack)μ κΈ°λ³Έμ μΈ μλ£κ΅¬μ‘° μ€ νλλ‘, μ»΄ν¨ν° νλ‘κ·Έλ¨μ μμ±ν λ μμ£Ό μ΄μ©λλ κ°λ μ΄λ€. μ€νμ μλ£λ₯Ό λ£λ (push) μ ꡬμ μλ£λ₯Ό λ½λ (pop) μ κ΅¬κ° κ°μ μ μΌ λμ€μ λ€μ΄κ° μλ£κ° μ μΌ λ¨Όμ λμ€λ (LIFO, Last in First out) νΉμ±μ κ°μ§κ³ μλ€.
1λΆν° nκΉμ§μ μλ₯Ό μ€νμ λ£μλ€κ° λ½μ λμ΄λμμΌλ‘μ¨, νλμ μμ΄μ λ§λ€ μ μλ€. μ΄λ, μ€νμ pushνλ μμλ λ°λμ μ€λ¦μ°¨μμ μ§ν€λλ‘ νλ€κ³ νμ. μμμ μμ΄μ΄ μ£Όμ΄μ‘μ λ μ€νμ μ΄μ©ν΄ κ·Έ μμ΄μ λ§λ€ μ μλμ§ μλμ§, μλ€λ©΄ μ΄λ€ μμλ‘ pushμ pop μ°μ°μ μνν΄μΌ νλμ§λ₯Ό μμλΌ μ μλ€. μ΄λ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ λ ₯
첫 μ€μ n (1 β€ n β€ 100,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° nκ°μ μ€μλ μμ΄μ μ΄λ£¨λ 1μ΄μ nμ΄νμ μ μκ° νλμ© μμλλ‘ μ£Όμ΄μ§λ€. λ¬Όλ‘ κ°μ μ μκ° λ λ² λμ€λ μΌμ μλ€.
μΆλ ₯
μ λ ₯λ μμ΄μ λ§λ€κΈ° μν΄ νμν μ°μ°μ ν μ€μ ν κ°μ© μΆλ ₯νλ€. pushμ°μ°μ +λ‘, pop μ°μ°μ -λ‘ νννλλ‘ νλ€. λΆκ°λ₯ν κ²½μ° NOλ₯Ό μΆλ ₯νλ€.
μΆμ²:https://www.acmicpc.net/problem/1874
νμ΄
NOκ° λμ€λ μν©λΆν° μ κ·Όν΄μ μΌμ΄μ€ λΆλ¦¬νκΈ° μμνλ€.
λ€λ§ val == k μΌλμ μΌμ΄μ€λ₯Ό λμ³€λ€.
λ μ€μ€λ‘ ν μ€νΈ μΌμ΄μ€λ₯Ό μ€μ ν΄μ κ²½μ°μ μλ₯Ό λ°μ Έλ³΄λ νμ κΈΈλ¬μΌ ν¨.
++ topμ΄λ popλ₯Ό μ¬μ©ν λ emptyμν©μ μμΈμ²λ¦¬ μν΄μ£Όλ©΄ λ°νμμλ¬ λ°μνλ κ² λͺ μ¬νκΈ°
#include <bits/stdc++.h>
using namespace std;
int N, k=1;
string str = "";
int main(){
ios::sync_with_stdio(0);
cin.tie();
stack<int> s;
cin >> N;
while(N--){
int val;
cin >> val;
if(val > k){
while(k <= val){
str += "+\n";
s.push(k++);
}
str += "-\n";
s.pop();
}
else if(val == k){
str += "+\n";
str += "-\n";
k++;
}
else{
if(s.empty()) continue;
if(val != s.top()){
cout << "NO\n";
return 0;
}
else{
str += "-\n";
s.pop();
}
}
}
cout << str;
}