티스토리 뷰

Algorithm

백준_가운데를 말해요_1655

Young_J 2021. 2. 14. 23:32

// 알고리즘

 

1. 자료구조활용 문제

 

2. 우선순위큐 사용

 - 중간값을 구하기 위해 min우선순위큐와 max우선순위큐 2개 사용

 - 우선순위큐의 크기가 같으면 두개의 peek값을 비교하여 값 선정 

 - min의 peek 값과 max의 peek값을 비교하여 min 값이 더 작으면 자리교체

 

3. StringBuilder에 max.peek 값 저장 

더보기
import java.util.*;
import java.io.*;

public class 가운데를말해요_1655 {
	static int N;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		PriorityQueue<Integer> max = new PriorityQueue<>((o1, o2) -> o2 - o1);
		PriorityQueue<Integer> min = new PriorityQueue<>();
		StringBuilder sb = new StringBuilder();

		max.add(Integer.parseInt(br.readLine()));
		sb.append(max.peek() + "\n");

		for (int i = 0; i < N - 1; i++) {
			int num = Integer.parseInt(br.readLine());

			if (min.size() == max.size()) max.add(num);
			else min.add(num);
			if (search(max.peek(), min.peek(), sb)) {
				int m = min.poll();
				int n = max.poll();
				max.add(m);
				min.add(n);
			}
			sb.append(max.peek() + "\n");
		}

		System.out.println(sb.substring(0, sb.length() - 1).toString());

	}

	private static boolean search(Integer maxNum, Integer minNum, StringBuilder sb) {
		if (maxNum > minNum) {
			return true;
		} else {
			return false;
		}
	}

}

 

※ 출력을 한 번에 하지 않고 매번 System.out.print를 했더니 계속 시간초과가 나는거였음... 출력도 신경써서 해야할거같음.

'Algorithm' 카테고리의 다른 글

백준_컨베이어벨트_20055  (0) 2021.02.27
백준_줄 세우기_2252  (0) 2021.02.23
백준_부분 합_1806  (0) 2021.02.07
백준_스타트 택시_19238  (0) 2021.02.06
백준_주사위 굴리기_14499  (0) 2021.01.31
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/11   »
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
글 보관함