알고리즘 문제 풀이/백준

백준 이중 우선순위 큐 - 7662

2023. 3. 29. 09:33
목차
  1. 문제 링크
  2. 문제 설명
  3. 문제 풀이 과정
  4. 풀이 코드

문제 링크

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

 

7662번: 이중 우선순위 큐

입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적

www.acmicpc.net

문제 설명

문제 풀이 과정

  • 우선 입력부를 처리하고, 조건에 따라 분기한다.
  • 생각해보니 정렬을 minheap으로 하면 간단할 것 같아서 라이브러리 가져와 해결
    • 틀림 min heap의 최대값을 구하는 과정에서 max함수를 사용하여 시간초과 문제를 발견함 max heap도 만들어서 처리하는 방식을쓰면 logn + logn이 될 듯함.
    • 근데 결국에 max값을 max heap에서 빼도 min heap에서도 뺴줘야함
    • 그러면 min heap만 사용하고 max값 찾아서 빼는거랑 뭐가 다르지?
    • visited를 사용하여 해결한 풀이를 봤고 같은 방식으로 해결함

풀이 코드

import sys
from heapq import heappush , heappop
T = int(sys.stdin.readline())
for i in range(T):
    minheap ,maxheap = [], []
    visited = [False] * 1000001 
    K = int(sys.stdin.readline())
    lst = [sys.stdin.readline().split() for j in range(K)]

    for key in range(len(lst)):
        op = lst[key]
        if op[0] == 'I':
            heappush(minheap,(int(op[1]),key)) # min heap으로 저장
            heappush(maxheap, (-int(op[1]),key)) # max heap으로 저장
            visited[key] =  True
        else:
            if op[1] == '-1':
                while minheap and not visited[minheap[0][1]]:
                    heappop(minheap)
                if minheap:
                    visited[minheap[0][1]] = False
                    heappop(minheap)
            else:
                while maxheap and not visited[maxheap[0][1]]:
                    heappop(maxheap)
                if maxheap:
                    visited[maxheap[0][1]] = False
                    heappop(maxheap)
    while minheap and not visited[minheap[0][1]]:
        heappop(minheap)
    while maxheap and not visited[maxheap[0][1]]:
        heappop(maxheap)

    try:
        print(-maxheap[0][0], minheap[0][0])
    except IndexError:
        print('EMPTY')

'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글

[백준] 8진수 2진수 - python[ 구현 ]  (0) 2024.09.09
[백준] 곱셈- python[ 구현 ]  (0) 2023.11.13
[백준] 최단경로- python[ Dijkstra ]  (1) 2023.11.01
[백준] 평범한 배낭 - python[ dp ]  (0) 2023.10.31
[백준] 1로 만들기 - python[ DP ]  (0) 2023.10.30
  1. 문제 링크
  2. 문제 설명
  3. 문제 풀이 과정
  4. 풀이 코드
'알고리즘 문제 풀이/백준' 카테고리의 다른 글
  • [백준] 곱셈- python[ 구현 ]
  • [백준] 최단경로- python[ Dijkstra ]
  • [백준] 평범한 배낭 - python[ dp ]
  • [백준] 1로 만들기 - python[ DP ]
잘잔디
잘잔디
4학년이 되고 취업 준비를 위해 2023-01-01부터 공부한 내용을 정리한 블로그입니다.
잘잔디
MBCS 공부일지
잘잔디
전체
오늘
어제
  • 분류 전체보기 (217)
    • 파이썬 (28)
      • 파이썬 이론 (8)
      • NumPy (3)
      • Pandas (6)
      • 파이썬 시각화 (8)
      • 응용 (2)
    • Java (3)
    • Back (38)
      • DataBase이론 (12)
      • MySQL (2)
      • JSP (8)
      • JSTL (2)
      • Spring (0)
      • Django (8)
      • MongoDB (6)
      • FastAPI (0)
    • Front (8)
      • HTML (3)
      • CSS (2)
      • JS (1)
    • 회고록 (10)
    • 알고리즘 문제 풀이 (95)
      • 알고리즘 이론 공부 (14)
      • 프로그래머스 (69)
      • 백준 (12)
    • 머신러닝 (0)
    • 딥러닝 (0)
    • Git (3)
    • R 프로그래밍 (3)
    • 빅데이터 관리 (16)
      • 리눅스 (4)
      • Hadoop (12)
    • AWS (2)
    • 일상 (10)
      • 책 리뷰 (5)
      • TOEIC (2)
      • 자잘하게 공부한 것들 (2)
    • 사이버보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Encore
  • JS
  • CSS
  • git
  • playdata
  • 즐거웠다
  • db
  • web
  • 객체지향
  • JavaScript
  • Java
  • 독산역
  • 골드
  • backend
  • Database
  • 이중우선순위 큐
  • OOP
  • 백준
  • HTML

최근 댓글

최근 글

hELLO · Designed By 정상우.
잘잔디
백준 이중 우선순위 큐 - 7662
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.