https://www.acmicpc.net/problem/2696
2696번: 중앙값 구하기
문제 어떤 수열을 읽고, 홀수번째 수를 읽을 때 마다, 지금까지 입력받은 값의 중앙값을 출력하는 프로그램을 작성하시오. 예를 들어, 수열이 1,5,4,3,2 이면, 홀수번째 수는 1번째 수, 3번째 수, 5번
www.acmicpc.net
트리를 이용한 자료구조이다. 중복된 원소를 입력 받기 위해서 multiset을 이용하였다. 중앙값을 구하면 되는데 중앙값은 평균이 아니고 주어진 수열에서 오름차순이나 내림차순으로 배열하였을 때 가장 중앙에 위치한 원소를 가리켜 말한다. 따라서 set이나 multiset은 입력과 동시에 오름차순으로 정렬해주기 때문에 이 문제에 적합하다고 생각하였다.
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main() {
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
cin >> T;
while(T--) {
int M, num;
int show = 1;
vector<int> v;
multiset<int> st;
cin >> M;
for(int i = 0; i < M; i++) {
cin >> num;
v.push_back(num);
}
cout << M / 2 + 1<< '\n';
for(int i = 0; i < M; i++) {
st.insert(v[i]);
if((i + 1) % 2 == 1) {
auto it = st.begin();
for(int j = 0; j < (i + 1) / 2; j++) {
it++;
}
cout << *it << ' ';
if(show % 10 == 0 && show != 0) {
cout << '\n';
}
show++;
}
}
cout << '\n';
}
}
'백준' 카테고리의 다른 글
백준2023 - 신기한 소수 (0) | 2020.05.29 |
---|---|
백준11502 - 새 개의 소수 문제 (0) | 2020.05.21 |
백준11501 - 주식 (0) | 2020.05.16 |
백준16162 - 가희와 3단 고음 (0) | 2020.05.13 |
백준18353 - 병사 배치하기 (0) | 2020.05.12 |