728x90
https://www.acmicpc.net/problem/1655
1655번: 가운데를 말해요
첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -10,000보다 크거나 같고, 10,000보다 작거나 같다.
www.acmicpc.net
우선순위 큐를 응용하여 중앙값을 빠르게 찾는 문제
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PriorityQueue<Integer> pq_min = new PriorityQueue<>( );
PriorityQueue<Integer> pq_max = new PriorityQueue<>( new Comparator<Integer>() {
@Override public int compare( Integer one, Integer two ) {
return two.compareTo( one );
}
} );
int t, n = sc.nextInt();
for( int i = 0; i < n; i++ ) {
t = sc.nextInt();
if( pq_max.size() == pq_min.size() ) pq_max.add( t );
else pq_min.add( t );
if( !pq_min.isEmpty() && !pq_max.isEmpty() &&
pq_min.peek() < pq_max.peek() ) {
int a = pq_max.poll(), b = pq_min.poll();
pq_max.add(b);
pq_min.add(a);
}
System.out.println( pq_max.peek() );
}
sc.close();
}
}
숫자들을 정렬한 뒤 앞의 절반을 최대 힙에, 뒤의 절반을 최소 힙에 넣음
만약 수열의 길이가 홀수라면 최대 힙에 숫자를 하나 더 넣기로 함
1. 최대 힙의 크기는 최소 힙의 크기와 같거나, 하나 더 크다
2. 최대 힙의 최대 원소는 최소 힙의 최소 원소보다 작거나 같다
출처 : 알고리즘 문제 해결 전략
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 백준 온라인 저지 ( BOJ )' 카테고리의 다른 글
[백준(Baekjoon)][자바(java)] 1931 : 회의실배정 / 그리디 알고리즘 (0) | 2020.05.11 |
---|---|
[백준(Baekjoon)][자바(java)] 11047 : 동전 0 / 그리디 알고리즘 (0) | 2020.05.11 |
[백준(Baekjoon)][자바(java)] 11286 : 절댓값 힙 / 우선순위 큐 (0) | 2020.04.28 |
[백준(Baekjoon)][자바(java)] 1927 : 최소 힙 / 우선순위 큐 (0) | 2020.04.28 |
[백준(Baekjoon)][자바(java)] 11279 : 최대 힙 / 우선순위 큐 (0) | 2020.04.28 |