{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉힙〉중고마켓 최저가 알림← 이전다음 →
#103 · 힙쉬움최소 힙 구현,명령어 처리

중고마켓 최저가 알림

문제

중고마켓 앱에는 인기 모델의 최저가 알림 기능이 있습니다. 판매자가 매물을 올리면 가격표에 가격이 하나 쌓이고, 거래가 성사되면 가장 싼 매물 이 가격표에서 빠집니다.

명령어 목록 commands가 시간 순서대로 주어집니다. 각 명령어는 다음 세 가지 중 하나입니다.

명령어 의미
"등록 P" 가격이 P원인 매물을 가격표에 추가한다. 같은 가격의 매물이 여러 개 있을 수 있다.
"조회" 현재 최저가를 알림으로 보낸다. 가격표는 변하지 않는다.
"판매" 현재 최저가 매물 한 개 가 팔린다. 팔린 가격을 알림으로 보내고 그 매물은 가격표에서 사라진다.

"조회"나 "판매" 시점에 가격표가 비어 있으면 알림 값은 -1이며, 이때 "판매"는 아무 일도 일어나지 않습니다.

알림으로 보낸 값을 보낸 순서대로 담은 배열을 반환하는 solution(commands) 함수를 작성하세요. 알림이 한 번도 발생하지 않으면 빈 배열을 반환합니다.

예시

commands=["등록 15000","등록 9800","조회","판매","조회"] → [9800, 9800, 15000]
  등록 15000 → 가격표 {15000}
  등록 9800  → 가격표 {9800, 15000}
  조회       → 최저가 9800 알림 (가격표 유지)
  판매       → 9800 매물 판매 알림 → 가격표 {15000}
  조회       → 최저가 15000 알림
 
commands=["조회","판매","등록 500","조회"] → [-1, -1, 500]
  빈 가격표에서의 조회·판매는 -1 알림
 
commands=["등록 3000","등록 3000","판매","조회","판매","조회"] → [3000, 3000, 3000, -1]
  같은 가격 매물이 두 개이므로 판매 후에도 최저가는 3000이다.

제약 조건

  • 1 ≤ commands.length ≤ 3,000
  • 각 명령어는 "등록 P", "조회", "판매" 형태의 문자열이며 그 외 형식은 주어지지 않는다.
    • "등록 P"는 명령어와 가격이 공백 한 칸으로 구분된다.
  • 1 ≤ P ≤ 1,000,000 이며 P는 정수다.
  • 반환 배열의 원소는 정수이고, 알림이 없으면 []를 반환한다.

시간 복잡도 목표: O(N log N) — 최저가를 매번 다시 훑지 않고, 삽입·최솟값 삭제가 각각 O(log N)인 최소 힙으로 가격표를 관리하세요.

참고: TypeScript에는 내장 우선순위 큐(힙)가 없으므로 배열 기반으로 직접 구현해야 합니다.

테스트 케이스

예시 1: 등록 후 조회·판매
입력: commands = ["등록 15000","등록 9800","조회","판매","조회"]
출력: [9800,9800,15000]
예시 2: 빈 가격표 조회·판매는 -1
입력: commands = ["조회","판매","등록 500","조회"]
출력: [-1,-1,500]
예시 3: 같은 가격 매물 중복
입력: commands = ["등록 3000","등록 3000","판매","조회","판매","조회"]
출력: [3000,3000,3000,-1]
등록만 있어 알림이 없음 → 빈 배열
입력: commands = ["등록 100","등록 200","등록 300"]
출력: []
판매 후 더 싼 매물 등록 — 최저가 갱신
입력: commands = ["등록 700","등록 200","판매","등록 500","조회","등록 100","판매","판매","조회","판매","판매"]
출력: [200,500,100,500,700,700,-1]
가격 경계값(1, 1,000,000)
입력: commands = ["등록 1000000","등록 1","조회","판매","판매","조회","판매"]
출력: [1,1,1000000,-1,-1]
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.