코딩 공부/알고리즘

덱 Double ended queue

공부를 함 2024. 10. 11. 10:43
  • 원소의 추가 O(1)
  • 원소의 제거 O(1)
  • 제일 앞/뒤 원소 확인 O(1)
  • 제일 앞/뒤가 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능

 

연습 문제

 

1. 백준 10866 : https://www.acmicpc.net/problem/10866

StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

int n = int.Parse(sr.ReadLine());
LinkedList<int> deque = new LinkedList<int>();

for (int i = 0; i < n; i++)
{
    string[] s = sr.ReadLine().Split(" ");
    var a = s[0];
    int b = 0;
    if (s.Length >= 2)
    {
        b = int.Parse(s[1]);
    }

    if (s[0] == "push_front")
    {
        deque.AddFirst(b);
    }
    else if (s[0] == "push_back")
    {
        deque.AddLast(b);
    }
    else if (s[0] == "pop_front")
    {
        if (deque.Count == 0) sw.WriteLine(-1);
        else
        {
            sw.WriteLine(deque.First.Value);
            deque.RemoveFirst();
        }

    }
    else if (s[0] == "pop_back")
    {
        if (deque.Count == 0) sw.WriteLine(-1);
        else
        {
            sw.WriteLine(deque.Last.Value);
            deque.RemoveLast();
        }
    }
    else if (s[0] == "size")
    {
        sw.WriteLine(deque.Count);
    }
    else if (s[0] == "empty")
    {
        if (deque.Count == 0) sw.WriteLine(1);
        else sw.WriteLine(0);
    }
    else if (s[0] == "front")
    {
        if (deque.Count == 0) sw.WriteLine(-1);
        else
        {
            sw.WriteLine(deque.First.Value);
        }
    }
    else if (s[0] == "back")
    {
        if (deque.Count == 0) sw.WriteLine(-1);
        else
        {
            sw.WriteLine(deque.Last.Value);
        }
    }
}

sw.Flush();
sw.Close();
sr.Close();

'코딩 공부 > 알고리즘' 카테고리의 다른 글

BFS  (0) 2024.10.13
스택 활용  (0) 2024.10.12
큐 queue  (0) 2024.10.11
스택 Stack  (0) 2024.10.11
연결 리스트  (0) 2024.10.11