백준 18115 c++

magicdrill·2024년 5월 15일
0

백준 문제풀이

목록 보기
346/654

백준 18115 c++

오랜만에 덱과 스택을 사용해봤다.
덱은 리스트의 앞, 뒤에서 접근이 가능하고, 스택은 리스트의 뒤에서만 접근이 가능하다.
처음 카드 묶음을 구하기 위해서는 덱을 사용했고, 카드스킬을 저장하기 위해서 스택을 사용했다.
처음 문제에 접근할 때 정렬된 카드 묶음을 위한 덱을 만들었지만 쓸모가 없었다.

#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;
}

0개의 댓글