백준 24511 - queuestack

황재진·2024년 3월 17일

백준

목록 보기
27/54
post-thumbnail

먼저 문제에 대해 잘 이해할 필요가 있습니다.

일단 stack인 부분은 단순히 값이 들어오고 나가기 때문에 무시해도 되고, 핵심은 queue 부분입니다.

queue에서 새 값을 enqueue하고 dequeue해 다음 queue에 enqueue합니다.

첫번째 예시를 시각화해서 보면 아래와 같습니다.

이를 더 단순화할 수 있습니다.

두 queue를 이렇게 붙여서 보면 맨 앞부분에 삽입을 하고, 맨 뒷부분이 빠지는걸 확인할 수 있습니다.
deque 자료구조는 양방향 삽입, 삭제가 가능하므로 deque를 이용하면 쉽게 해결할 수 있습니다.

저는 이전에 풀었던 문제인 덱 2 에서 만든 Deque 클래스를 가져와 해결했습니다. 해당 클래스는 저 링크를 통해 들어가면 확인할 수 있습니다.

#include <iostream>

int main()
{
	std::cin.tie(NULL);
	std::ios_base::sync_with_stdio(false);

	int n;
	std::cin >> n;

	int* type = new int[n + 1];
	Deque deque(n + 1);

	for (int i = 0; i < n; i++)
		std::cin >> type[i];

	for (int i = 0; i < n; i++)
	{
		int temp;
		std::cin >> temp;
		if (type[i] == 0)
		{
			deque.Add_Rear(temp);
		}
	}
	
	int c;
	std::cin >> c;
	for (int i = 0; i < c; i++)
	{
		int temp;
		std::cin >> temp;

		deque.Add_Front(temp);
		std::cout << deque.Delete_Rear() << " ";
	}

	return 0;
}
profile
프로그래밍, 쉐이더 등 이것저것 다해보는 게임 개발자입니다

0개의 댓글