봄봄.devlog
백준 1655번 :: 가운데로 말해요 본문
1655번: 가운데를 말해요
첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -1
www.acmicpc.net
✍ 문제 풀이
minHeap과 maxHeap 우선순위큐를 만들고 값을 추가로 입력받을 때마다 조건에 맞게 큐에 담아서
가운데 값을 찾는다.
✍ 소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
// List에 담는 방식 => 시간초과
public class Q1655_가운데를말해요 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> o2 - o1);
for(int i=0; i<N; i++) {
int num = Integer.parseInt(br.readLine());
if(minHeap.size() == maxHeap.size()) maxHeap.add(num);
else minHeap.add(num);
if(!minHeap.isEmpty() && !maxHeap.isEmpty()) {
if(minHeap.peek() < maxHeap.peek()) {
int tmp = minHeap.poll();
minHeap.offer(maxHeap.poll());
maxHeap.offer(tmp);
}
}
sb.append(maxHeap.peek()+"\n");
}
System.out.println(sb.toString());
}
}
'Algorithm > 백준' 카테고리의 다른 글
백준 1504번 :: 특정한 최단경로 (0) | 2020.11.05 |
---|---|
백준 2293번 :: 동전 1 (DP) (0) | 2020.10.09 |
백준 4963번 :: 섬의 개수(DFS) (0) | 2020.08.28 |
백준 2667번 :: 단지 번호 붙이기 (DFS) Java (0) | 2020.08.28 |
백준 7576번 :: 토마토 (BFS) (0) | 2020.08.23 |
Comments