반응형
https://www.acmicpc.net/problem/11286
문제 정리
0이 아니면 원소 추가.
0이면 추가된 원소 중 절대값이 가장 작은 원소를 출력 후 제거.
원소의 개수가 0일 경우 0이 입력되면 0을 출력.
문제 해결 방법
우선순위 큐를 떠올리면 간단하게 풀 수 있는 문제이다.
우선 순위 큐를 간단하게 보려면
https://hagisilecoding.tistory.com/60?category=1050177
위 링크에서 간단하게 어떤건지 볼 수 있다.
우선순위 큐에서 구조체와 operator 함수를 사용하여 정렬 구조를 바꾸어 준다.
그리고 입력 받은 것을 큐에 push 해주고 입력 값이 0이라면 큐가 비어있는지 확인 후 조건에 맞게 구현해 주면 됩니다.
전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <iostream>
#include <queue>
#include <vector>
#include <cmath>
using namespace std;
struct cmp{ // 정렬 기준 바꾸는 함수
bool operator()(int a, int b){
if(abs(a) == abs(b))
return a > b; // 절대값이 같은 경우 가장 작은 원소로
return abs(a) > abs(b); // 절대값이 작은 원소로
}
};
int main(){
int n, x;
priority_queue<int, vector<int>, cmp> q;
vector<int> v;
cin >> n;
for (int i = 0; i < n;i++){
cin >> x;
if(x == 0){
if(q.empty()){
// 큐가 비어있을 때 0을 출력
v.push_back(0);
}else{
v.push_back(q.top()); // 가장 작은 원소 출력
q.pop(); // 제거
}
}else{
q.push(x); // 원소 추가
}
}
for (int i = 0; i < v.size(); i++){
cout << v[i] << '\n'; // 정답 출력
}
return 0;
}
|
cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준 11660 구간 합 구하기 5 c++ [컴공과고씨] (0) | 2022.09.18 |
---|---|
백준 1389 케빈 베이컨의 6단계 법칙 c++ [컴공과고씨] (0) | 2022.09.10 |
백준 11659 구간 합 구하기 4 c++ [컴공과고씨] (0) | 2022.09.04 |
백준 16236 아기 상어 c++ [컴공과고씨] (0) | 2022.09.03 |
백준 17219 비밀번호 찾기 c++ [컴공과고씨] (0) | 2022.09.03 |