개발자일걸요..?

1655번 가운데를 말해요 본문

알고리즘코딩/Baekjoon Online Judge

1655번 가운데를 말해요

Re_A 2021. 3. 9. 09:58
728x90
반응형

문제 링크 : www.acmicpc.net/problem/1655

 

1655번: 가운데를 말해요

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

www.acmicpc.net



<알고리즘>

  1) 작은 수들(내림차순)과 큰 수들(오름차순)을 구분해서 두개의 priority queue에 각각 집어넣음

  2) 입력 받는 수를 두 개의 queue에 번갈아가면서 input

  3) 만약 작은 수들 중 제일 큰 값이 큰 수들 중 제일 작은 값보다 클 때 두 수를 swap

      (작은 수 들 중 제일 큰 값< 큰 수들 중 제일 작은 값 일때까지)

  4) 결국 중앙 값은 작은 수들 중 제일 큰 값이므로 small prioirty queue의 top 출력

 

 

 

메모리 : 2784KB    시간 28ms 

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;

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

	int N = 0;
	cin >> N;

	priority_queue<int, vector<int>, less<int>> small;
	priority_queue<int, vector<int>,  greater<int>> big;
	int a = 0;

	while (N--) {
		cin >> a;
		
		if (small.size()>big.size()) {
			big.push(a);
		}
		else {
			small.push(a);
		}
		
		while (!small.empty() && !big.empty() &&!(small.top() <= big.top())) {
			int temp = small.top();
			small.pop();
			int temp2 = big.top();
			big.pop();
			small.push(temp2);
			big.push(temp);	
		}
		cout << small.top() << "\n";
	}
	return 0;
}
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

10844번 쉬운 계단 수  (0) 2021.03.11
1932번 정수 삼각형  (0) 2021.03.10
11286번 절댓값 힙  (0) 2021.03.08
1463번 1로 만들기  (0) 2021.03.07
1927번 최소 힙  (0) 2021.03.06
Comments