상세 컨텐츠

본문 제목

백준 1655번

백준 알고리즘 풀이

by 발발개발 2021. 11. 8. 11:19

본문

원본 : https://www.acmicpc.net/problem/1655

 

1655번: 가운데를 말해요

첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1

www.acmicpc.net

 

풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.util.PriorityQueue;

public class Main {

	public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	public static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

	public static void main(String[] args) throws Exception {
		int n = Integer.parseInt(reader.readLine());
		
		PriorityQueue<Integer> leftPq = new PriorityQueue<Integer>(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return o2 - o1;
			}
		});
		
		PriorityQueue<Integer> rightPq = new PriorityQueue<Integer>(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return o1 - o2;
			}
		});
		
		for (int i = 1; i <= n; i++) {
			int input = Integer.parseInt(reader.readLine());
			
			if (i % 2 == 0) {
				leftPq.add(input);
			} else {
				rightPq.add(input);
			}
			
			if (leftPq.peek() != null && rightPq.peek() != null) {
				int leftTop = leftPq.peek();
				int rightTop = rightPq.peek();
				
				if (leftTop > rightTop) {
					leftPq.remove();
					rightPq.remove();
					leftPq.add(rightTop);
					rightPq.add(leftTop);
				}
			}
			
			if (i % 2 == 0) {
				writer.write(leftPq.peek() + "\n");
			} else {
				writer.write(rightPq.peek() + "\n");
			}
		}
		
		writer.flush();
	}
}

'백준 알고리즘 풀이' 카테고리의 다른 글

백준 2606번  (0) 2021.11.09
백준 1260번  (0) 2021.11.09
백준 11286번  (0) 2021.11.08
백준 1927번  (0) 2021.11.08
백준 12015번  (0) 2021.11.04

관련글 더보기

댓글 영역