https://www.acmicpc.net/problem/11286
해당 문제는 두가지 조건을 만족시키는게 핵심이며 두 가지 조건을 만족시키는 정렬 조건을 만들면 된다.
- 배열에서 절댓값이 가장 작은 값을 출력한다.
- 절댓값이 가장 작은 값이 여러 개 일 때는 가장 작은 수를 출력한다.
코드는 아래와 같다.
#include <bits/stdc++.h>
using namespace std;
class cmp
{
public:
bool operator()(int a, int b)
{
if (abs(a) == abs(b)) return a > b; // 두 수의 절대값이 같다면 값이 작은수를 top()쪽으로 정렬한다.
else return abs(a) > abs(b); // 두 수의 값이 다르다면 절대값이 작은수를 top()쪽으로 정렬한다.
}
};
priority_queue<int, vector<int>, cmp> pq; // 만든 정렬 cmp class를 세번째 인자에 넣는다.
int main() {
int n;
cin >> n;
int x;
while (n--)
{
cin >> x;
if (x != 0)
{
pq.push(x);
}
else
{
if (pq.empty()) cout << 0 << '\n';
else
{
cout << pq.top() << '\n';
pq.pop();
}
}
}
}
'CS(Computer Science)지식 > [C++][코딩 테스트] 자료구조 및 알고리즘' 카테고리의 다른 글
백준 2948번: 2009년 (C++) (1) | 2024.01.31 |
---|---|
백준 1924번: 2007년 (C++) (0) | 2024.01.31 |
백준 11718번: 그대로 출력하기 (C++) (0) | 2024.01.31 |
백준 23326번: 홍익 투어리스트 (C++) (0) | 2024.01.31 |
백준 21939번: 문제 추천 시스템 Version1 (C++) (1) | 2024.01.31 |