ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 10866 덱
    코딩 테스트/백준 2022. 2. 15. 21:27

    https://www.acmicpc.net/problem/10866

     

    10866번: 덱

    첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

    www.acmicpc.net

     

     

     

     

     

     

    #include <iostream>
    using namespace std;
    
    const int MAX = 100000;
    
    class bojDeque
    {
    private:
    	int* dequeMem;
    	int dequeFront, dequeTail;
    	int max, dequeSize;
    
    public:
    	bojDeque() : dequeFront(MAX), dequeTail(MAX), max((MAX * 2) + 1), dequeSize(0)
    	{
    		dequeMem = new int[(MAX * 2) + 1];
    	}
    	~bojDeque()
    	{
    		delete[] dequeMem;
    	}
    
    	void push_front(const int data);
    	void push_back(const int data);
    	int pop_front();
    	int pop_back();
    	int size();
    	bool empty();
    	int front();
    	int back();
    };
    
    void bojDeque::push_front(const int data)
    {
    	dequeMem[--dequeFront] = data;
    	dequeSize++;
    }
    
    void bojDeque::push_back(const int data)
    {
    	dequeMem[dequeTail++] = data;
    	dequeSize++;
    }
    
    int bojDeque::pop_front()
    {
    	if (empty())
    		return -1;
    
    	dequeSize--;
    	return dequeMem[dequeFront++];
    }
    
    int bojDeque::pop_back()
    {
    	if (empty())
    		return -1;
    
    	dequeSize--;
    	return dequeMem[--dequeTail];
    }
    
    int bojDeque::size()
    {
    	return dequeSize;
    }
    
    bool bojDeque::empty()
    {
    	return dequeSize == 0;
    }
    
    int bojDeque::front()
    {
    	return empty() ? -1 : dequeMem[dequeFront];
    }
    
    int bojDeque::back()
    {
    	return empty() ? -1 : dequeMem[dequeTail - 1];
    }
    
    int main()
    {
    	ios::sync_with_stdio(false);
    	cin.tie(NULL);
    	cout.tie(NULL);
    
    	int N;
    	cin >> N;
    
    	string order[8] = { "push_front", "push_back", "pop_front", "pop_back", "size", "empty", "front", "back" };
    	bojDeque bjDeque;
    
    	for (int i = 0; i < N; i++)
    	{
    		string order;
    		cin >> order;
    
    		if (order == "push_front")
    		{
    			int data = 0;
    			cin >> data;
    
    			bjDeque.push_front(data);
    		}
    		else if (order == "push_back")
    		{
    			int data = 0;
    			cin >> data;
    
    			bjDeque.push_back(data);
    		}
    		else if (order == "pop_front")
    			cout << bjDeque.pop_front() << "\n";
    		else if (order == "pop_back")
    			cout << bjDeque.pop_back() << "\n";
    		else if (order == "size")
    			cout << bjDeque.size() << "\n";
    		else if (order == "empty")
    			cout << bjDeque.empty() << "\n";
    		else if (order == "front")
    			cout << bjDeque.front() << "\n";
    		else if (order == "back")
    			cout << bjDeque.back() << "\n";
    	}
    
    	return 0;
    }

    '코딩 테스트 > 백준' 카테고리의 다른 글

    1158 요세푸스 문제  (0) 2022.02.14
    10845 큐  (0) 2022.02.12
    1406 에디터  (0) 2022.02.11
    1874 스택 수열  (0) 2022.02.10
    9012 괄호  (0) 2022.02.09

    댓글