ML/AI/SW Developer

BAEK-1967 최소힙(C++, Python)

1. 문제 설명

  • 문제 링크
    1. 배열에 자연수 x를 넣는다.
    2. 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다.
    3. 비거나 0이면 출력

2. 풀이

  • priority_queue 라이브러리 활용

3. 코드

  • C++
#include<iostream>
#include<queue>

using namespace std;

int N;
priority_queue<int, vector<int>, greater<int>> pq;

void Input() {
	scanf("%d", &N);
}

void Solve() {
	int number; // 입력받을 숫자
	for (int i = 0; i < N; i++) {
		scanf("%d", &number);
		if (number == 0) { // 입력받은 숫자가 0이면
			if (pq.empty()) printf("0\n"); // 비었으면 0출력
			else {
				// 안비었으면 pq의 맨처음 원소 출력
				printf("%d\n", pq.top());
				pq.pop(); // 출력 후 제거
			}
		}
		else {
			// 0이아니면 입력
			pq.push(number);
		}
	}
}

int main() {

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	//1. 입력
	Input();

	//2. 풀이
	Solve();
	
	return 0;
}
  • python
# 알고리즘은 C++과 동일
import heapq 
from sys import stdin

N = int(stdin.readline()) 
pq = [] 
for i in range(N): 
	num = int(stdin.readline()) 
	if num == 0: 
		if heap: 
			print(heapq.heappop(pq)[1]) 
		else: 
			print(0) 
	else: 
		heapq.heappush(pq, [num, num])

4. 결과

간단한 문제라 생략!