7662번 - 이중 우선순위 큐
안녕하세요, 아래와 같은 알고리즘을 작성해서 구현했는데
틀렸습니다 가 나와서 알고리즘에 문제가 있는지 의견을 여쭤보려고 질문드립니다.
알고리즘
1. maxheap, minheap을 만들고, deleted_from_min, deleted_from_max 라는 Counter 를 만듭니다
(Counter는 python dictionary와 같은데 value가 0이 되면 key를 삭제하는 자료구조입니다.)
2. Insert 쿼리가 들어오면 maxheap, minheap에 모두 넣습니다.
3. 최대값을 지우는 쿼리가 들어오면, maxheap의 최대값을 꺼냅니다.
3-1. 그 값을 item이라고 하면, item이 deleted_from_min의 key로 존재하는지 확인합니다. 있다면 deleted_from_min[item]의 value를 1 줄이고, 3을 반복합니다.
3-2. key로 존재하지않는다면 deleted_from_max[item] 을 1 늘려줍니다
4. 최솟값을 지우는 쿼리가 들어오면, 위와 정반대로 합니다.
5. 모든 쿼리에 대해 2~4를 반복합니다.
6. maxheap의 최대값이 deleted_from_min 에 존재한다면 제거하고 다음 값을 확인합니다. deleted_from_min에 없는 값이 나올 때까지 반복합니다. 마지막으로 확인한 값이 최대값입니다.
7. 마찬가지로 minheap에 대해서도 반복합니다. 마지막으로 확인한 값이 최소값입니다.
최대한 풀어서 작성했는데 잘 이해가 되셨을지 모르겠네요.
혹시 이 알고리즘이 동작 안 하는 반례가 있을까요?
감사합니다.
35번째 라인 맞나요?
35번째 라인을 item = -heapq.heappop(max_heap) 로 수정해서 해결했습니다.
도움주셔서 정말 감사합니다.
댓글을 작성하려면 로그인해야 합니다.
shanytt 4년 전
안녕하세요, 아래와 같은 알고리즘을 작성해서 구현했는데
틀렸습니다 가 나와서 알고리즘에 문제가 있는지 의견을 여쭤보려고 질문드립니다.
알고리즘
1. maxheap, minheap을 만들고, deleted_from_min, deleted_from_max 라는 Counter 를 만듭니다
(Counter는 python dictionary와 같은데 value가 0이 되면 key를 삭제하는 자료구조입니다.)
2. Insert 쿼리가 들어오면 maxheap, minheap에 모두 넣습니다.
3. 최대값을 지우는 쿼리가 들어오면, maxheap의 최대값을 꺼냅니다.
3-1. 그 값을 item이라고 하면, item이 deleted_from_min의 key로 존재하는지 확인합니다. 있다면 deleted_from_min[item]의 value를 1 줄이고, 3을 반복합니다.
3-2. key로 존재하지않는다면 deleted_from_max[item] 을 1 늘려줍니다
4. 최솟값을 지우는 쿼리가 들어오면, 위와 정반대로 합니다.
5. 모든 쿼리에 대해 2~4를 반복합니다.
6. maxheap의 최대값이 deleted_from_min 에 존재한다면 제거하고 다음 값을 확인합니다. deleted_from_min에 없는 값이 나올 때까지 반복합니다. 마지막으로 확인한 값이 최대값입니다.
7. 마찬가지로 minheap에 대해서도 반복합니다. 마지막으로 확인한 값이 최소값입니다.
최대한 풀어서 작성했는데 잘 이해가 되셨을지 모르겠네요.
혹시 이 알고리즘이 동작 안 하는 반례가 있을까요?
감사합니다.