Algorithm/BOJ
가운데를 말해요 - 1655
jhg0406
2020. 3. 19. 20:29
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
42
43
44
45
46
47
48
49
50
51
52
|
//1655 - 가운데를 말해요
#include <iostream>
#include <queue>
using namespace std;
int N;
priority_queue<int> hq, tq;
void init()
{
hq = tq = priority_queue<int>();
cin >> N;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
init();
int x;
int ht, tt, hsize, tsize;
cin >> x, hq.push(x);
cout << x << "\n";
for(int i = 1; i<N; ++i)
{
cin >> x;
if(hq.size() > tq.size())
{
if(hq.top() <= x)
tq.push(-x);
else
{
tq.push(-hq.top());
hq.pop();
hq.push(x);
}
}
else
{
if(-tq.top() >= x)
hq.push(x);
else
{
hq.push(-tq.top());
tq.pop();
tq.push(-x);
}
}
cout << hq.top() << "\n";
}
}
|
cs |
https://www.acmicpc.net/problem/1655
1655번: 가운데를 말해요
첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -10,000보다 크거나 같고, 10,000보다 작거나 같다.
www.acmicpc.net
가운데를 말해요
우선순위큐를 두개 만들었습니다.
하나는 숫자가 큰것이 우선순위가 높게 설정했고, --> hq
하나는 숫자가 작은것을 우선순위가 높게 설정했습니다. --> tq
hq의 원소의 개수는 tq와 같거나 하나 많은 경우만 가능하고, hq에는 비교적 작은얘들, tq에는 큰 얘들이 들어가게 유지했습니다.