오랜만에 덱과 스택을 사용해봤다.
덱은 리스트의 앞, 뒤에서 접근이 가능하고, 스택은 리스트의 뒤에서만 접근이 가능하다.
처음 카드 묶음을 구하기 위해서는 덱을 사용했고, 카드스킬을 저장하기 위해서 스택을 사용했다.
처음 문제에 접근할 때 정렬된 카드 묶음을 위한 덱을 만들었지만 쓸모가 없었다.
#include <iostream>
#include <stack>
#include <deque>
using namespace std;
void input_info(/*deque<int>& card, */stack<int>& skill)
{
int N, i, skillnum;
cin >> N;
/*for (i = 1; i <= N; i++)
{
card.push_back(i);
}*/
for (i = 0; i < N; i++)
{
//card.push_back(i + 1);
cin >> skillnum;
skill.push(skillnum);
}
return;
}
void skill1(deque<int> &answer, int card)
{
answer.push_front(card);
return;
}
void skill2(deque<int>& answer, int card)
{
int temp;
temp = answer.front();
answer.pop_front();
answer.push_front(card);
answer.push_front(temp);
return;
}
void skill3(deque<int>& answer, int card)
{
answer.push_back(card);
return;
}
void find_answer(/*deque<int>& card,*/ stack<int>& skill)
{
int i, card = 1;
deque<int> answer;
//처음은 무조건 skill1
answer.push_back(card);
card++;
//card.pop_front();
skill.pop();
while (!skill.empty())
{
if (skill.top() == 1)
{
skill1(answer, card);
skill.pop();
}
else if (skill.top() == 2)
{
skill2(answer, card);
skill.pop();
}
else
{
skill3(answer, card);
skill.pop();
}
card++;
}
for (int ans : answer)
{
cout << ans << " ";
}
cout << "\n";
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//deque<int> card;
stack<int> skill;
input_info(/*card,*/ skill);
find_answer(/*card,*/ skill);
return 0;
}