티스토리 뷰
문제풀이
이 문제는 우선순위 큐 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
링크
TAG
- 스택
- SW Expert Academy
- 투 포인터
- 위상 정렬
- BOJ
- Kotlin
- SWEA
- 분할 정복
- 프로그래머스
- 자바
- dfs
- 배열
- 백준
- 재귀
- 브루트포스
- algorithm
- BFS
- 큐
- 그래프
- 트리
- 구현
- 알고리즘
- Java
- 두 포인터
- C++
- programmers
- 이분 탐색
- 정렬
- Two Pointer
- 문자열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함