티스토리 뷰

 

 

2696번: 중앙값 구하기

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1 ≤ M ≤ 9999, M은 홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주

www.acmicpc.net

 

 

문제풀이

 

이 문제는 우선순위 큐 2개를 이용해서 풀 수 있다.

기본적으로 우선순위 큐가 Heap 구조이므로 Max Heap과 Min Heap 두 개를 선언한다.

비교함수를 따로 정해주지 않으면 기본적으로 내림차순에 따라 정렬한다. (Max Heap)

 

// Min Heap
priority_queue<int, vector<int, int>, greater<int>> minheap;
// Max Heap
priority_queue<int> maxheap;

 

중간값을 찾아야 하므로 두 큐의 크기는 같아야 한다.

우선 입력 받은 정수를 두 큐의 크기가 같도록 큐에 넣어준다.

 

그 후 max heap의 top과 min heap의 top을 비교했을 때 min heap의 top이 더 크다면

정렬이 제대로 되지 않은 상태이므로 max heap과 min heap의 top을 swap해준다.

 

maxheap의 top이 중앙값이므로 홀수번째 수를 읽을 때마다 maxheap의 top을 저장해주면 된다.

 

 

C++ 코드

 

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ 1074] Z C++  (0) 2021.07.20
[BOJ 1655] 가운데를 말해요 C++  (0) 2021.07.20
[BOJ 2900] 프로그램 C++  (0) 2021.07.19
[BOJ 1005] ACM Craft C++  (0) 2021.07.16
[BOJ 1516] 게임 개발 C++  (0) 2021.07.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함