ML/AI/SW Developer

BAEK-11286 절대값 힙(C++)

1. 문제 설명

  • 문제 링크
    1. 배열에 정수 x (x ≠ 0)를 넣는다.
    2. 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다
    3. 비거나 0이면 출력

2. 풀이

  • priority_queue 라이브러리 활용

3. 코드

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<queue>

using namespace std;

int N;
// 쌍으로 입력받음 (절대값, 실제값) -> 정렬기준은 앞에 있는 원소
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, 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().second);
				pq.pop(); // 출력 후 제거
			}
		}
		else {
			// 0이아니면 입력
			pq.push(make_pair(abs(number), number));
		}
	}
}

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

	//1. 입력
	Input();

	//2. 풀이
	Solve();

	return 0;
}
# 알고리즘은 C++과 동일

4. 결과

간단한 문제라 생략!