🚀 들어가며...
- 1부터 시작하여, push의 경우 "+"를 출력하고 pop의 경우 "-"를 출력하는 문제이다.
- 스택에 push하는 순서는 반드시 오름차순을 지켜야한다.
🔗 문제
https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
💌 소스코드
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(void){
stack<int> st; // 수열을 관리하는 스택
string res = ""; // 결과 문자열
int current = 1; // 수열을 만들기 위해서 사용하는 1~n까지의 수 (시작 1)
int n; // 입력되는 수열 갯수
cin >> n;
// 최악 100,000^2 < 1s
for(int i=1; i<=n; i++){
int target; // 수열을 만들기 위해서 입력된 숫자
cin >> target;
for(; current<=n+1; current++){ // 수열의 숫자는 증가를 하며, 마지막은 n+1이다 (마지막 pop처리)
if(st.empty() || st.top() != target){ // 수열을 만들 수 없는 경우 PUSH
st.push(current);
res += "+\n";
}
else if(st.top() == target){ // 수열을 만들 수 있는 경우
st.pop();
res += "-\n";
break; // current를 재사용할 수 있음 (다시 반복문)
}
}
}
if(!st.empty()){
cout << "NO" << endl;
}else{
cout << res << endl;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 10845] 큐 (cpp, vector) (0) | 2021.12.19 |
---|---|
[백준 1406] 에디터 (cpp, stack) (0) | 2021.12.19 |
[백준 9012] 괄호 (cpp, stack) (0) | 2021.12.12 |
[백준 9093] 단어 뒤집기 (cpp, stack) (0) | 2021.12.12 |
댓글