C# 이중우선순위큐 / 프로그래머스 [Lv.3]

출처: 프로그래머스 코딩 테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/42628

 

 

나의 풀이

public class Solution {
    public int[] solution(string[] operations) 
    {
        var queue = new MyQueue();
        foreach(string str in operations)
        {
            if(str == "D 1")
            {
                queue.DeleteMax();
            }
            else if(str == "D -1")
            {
                queue.DeleteMin();
            }
            else
            {
                int n = int.Parse(str.Split()[1]);   
                queue.Add(n);
            }
        }
        
        return queue.Count > 0 ?  new int[2]{ queue.Max, queue.Min } : new int[2]{ 0, 0 };
    }
}
    
public class MyQueue
{
    List<int> queue;

    public MyQueue()
    {
        queue = new List<int>();
    }
    
    public int Count => queue.Count;
    public int Max => queue[Count - 1];
    public int Min => queue[0];
    
    public void Add(int n)
    {
        queue.Add(n);
        queue.Sort();
    }
    
    public void DeleteMin()
    {
        if(queue.Count > 0)
            queue.RemoveAt(0);
    }
    
    public void DeleteMax()
    {
        if(queue.Count > 0)
            queue.RemoveAt(queue.Count - 1);
    }
}

우선순위가 존재하고, 정렬되며, 최대값 혹은 최소값을 지울 수 있는 자료구조는 만드는 문제.

우선순위 큐가 그러하듯 실제로는 힙 자료구조로 만들어야 하지만, 

문제의 조건이 널널한 경우 리스트나 Array의 Sort() 만으로 통과한다. 

 

 

댓글

Designed by JB FACTORY