Baekjoon/Gold
C++ / 백준 / 2696 / 중앙값 구하기
GitHubSeob
2022. 4. 12. 18:54
문제
https://www.acmicpc.net/problem/2696
2696번: 중앙값 구하기
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1 ≤ M ≤ 9999, M은 홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주
www.acmicpc.net
문제풀이
multiset을 이용하여 풀었다.
입력받으면 multiset에 집어넣고 홀수번째 수를 입력받을 때마다 iterator을 이용하여 한 칸씩 중앙값을 가리킬 때까지 iterator를 증가시키고 해당 값을 answer에 push 한다.
모든 입력을 받았으면 answer의 크기와 answer의 모든 값들을 출력한다.
코드
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int T(0), M(0);
int idx(0), idx2(0), num(0);
cin >> T;
while (T--) {
cin >> M;
multiset<int>ms;
multiset<int>::iterator iter;
vector<int>answer;
for (idx = 0; idx < M; ++idx) {
cin >> num;
ms.insert(num);
iter = ms.begin();
if (idx % 2 == 0) {
for (idx2 = 0; idx2 < ms.size() / 2; ++idx2) {
iter++;
}
answer.push_back(*iter);
}
}
cout << answer.size() << '\n';
for (idx = 0; idx < answer.size(); ++idx) {
cout << answer[idx] << ' ';
}
cout << '\n';
}
}