수열 A는 1부터 N까지의 수를 하나씩만 사용하여 만들어진 길이 N의 수열이다.
N=3의 경우 A는 123, 132, 213, 231, 312, 321과 같이 여섯 종류가 존재한다.
정수 N과 수열 A 가 주어졌을 때, 수열 A를 스택을 이용하여 1부터 N까지 오름차순으로 (N=3인 경우 123) 만드는 방법을 출력하는 프로그램을 작성하자.
만약 N=3,\ A=321인 경우,
push (스택에 A_1=3을 삽입한다)
push (스택에 A_2=2를 삽입한다)
push (스택에 A_3=1을 삽입한다)
pop (스택의 top에 있는 값인 1을 출력한다)
pop (스택의 top에 있는 값인 2을 출력한다)
pop (스택의 top에 있는 값인 3을 출력한다)
순서로 진행하면 123이 순서대로 만들어진다.
#include <iostream>
#include <vector>
#include <stack>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
string input_seq;
cin >> input_seq;
vector<int> a(n);
for (int i = 0; i < n; i++) {
a[i] = input_seq[i] - '0';
}
stack<int> s;
vector<string> operations;
int expected = 1;
for (int i = 0; i < n; i++) {
s.push(a[i]);
operations.push_back("push");
while (!s.empty() && s.top() == expected) {
s.pop();
operations.push_back("pop");
expected++;
}
}
if (!s.empty()) {
cout << -1 << "\n";
}
else {
for (int i = 0; i < operations.size(); i++) {
cout << operations[i] << "\n";
}
}
return 0;
}
일단 수열의 길이를 정하고 그 수열이 어떻게 있는지 string을 이용해서 입력 받은뒤 그걸 vector를 이용해서 하나씩 쪼개어 저장 한뒤 int expected를 만들어 어떤 값을 찾아야하는지 정한다. 그 후 while문을 돌며 값을 찾고 값이 가능 하다면 pop을 vector에 저장 한다 그후 들어온 값을 for문을 이용하여 출력 한다.