본문 바로가기
전공공부/코딩테스트

(c++) 백준 1655번 가운데를 말해요

by 시아나 2021. 12. 29.

문제 : 

https://www.acmicpc.net/problem/1655

 

1655번: 가운데를 말해요

첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1

www.acmicpc.net

 

도움받은 블로그 : 

https://www.crocus.co.kr/625

 

[1655번] 가운데를 말해요

문제 출처 : https://www.acmicpc.net/problem/1655 알고리즘 분석 : 문제 해결에 필요한 사항 1. 최대 힙, 최소 힙 2. Priority Queue 3. pq로 중간 값 구하는 방식 중간값 구하기 알고리즘은 다음과 같다. 1. 최..

www.crocus.co.kr


#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

priority_queue<int, vector<int>, greater<>> big_queue;
priority_queue<int, vector<int>, less<>> small_queue;

int main() {
	int N;
	scanf_s("%d", &N);
	for (int i = 0; i < N; i++) {
		int num;
		scanf_s("%d", &num);
		
		if (small_queue.size() == big_queue.size()) {
			small_queue.push(num);
		}
		else {
			big_queue.push(num);
		}

		if (!small_queue.empty() && !big_queue.empty() && big_queue.top() <= small_queue.top()) {
			int n1, n2;
			n1 = small_queue.top(); n2 = big_queue.top();
			small_queue.pop(); big_queue.pop();
			small_queue.push(n2); big_queue.push(n1);
		}
		printf("%d\n", small_queue.top());
	}
	return 0;
}