[Algorithm] ๐Ÿ–•๋ฐฑ์ค€ 1655 ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”

HaJingJingยท2021๋…„ 9์›” 3์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
116/119

0. ๋ฌธ์ œ

๋ฐฑ์ค€์ด๋Š” ๋™์ƒ์—๊ฒŒ "๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”" ๊ฒŒ์ž„์„ ๊ฐ€๋ฅด์ณ์ฃผ๊ณ  ์žˆ๋‹ค. ๋ฐฑ์ค€์ด๊ฐ€ย ์ •์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์™ธ์น ๋•Œ๋งˆ๋‹ค ๋™์ƒ์€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฑ์ค€์ด๊ฐ€ ๋งํ•œ ์ˆ˜ ์ค‘์—์„œ ์ค‘๊ฐ„๊ฐ’์„ ๋งํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ๊ทธ๋™์•ˆ ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์นœ ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ง์ˆ˜๊ฐœ๋ผ๋ฉด ์ค‘๊ฐ„์— ์žˆ๋Š” ๋‘ ์ˆ˜ ์ค‘์—์„œ ์ž‘์€ ์ˆ˜๋ฅผ ๋งํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฑ์ค€์ด๊ฐ€ ๋™์ƒ์—๊ฒŒ 1, 5, 2, 10, -99, 7, 5๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์™ธ์ณค๋‹ค๊ณ  ํ•˜๋ฉด, ๋™์ƒ์€ 1, 1, 2, 2, 2, 2, 5๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋งํ•ด์•ผ ํ•œ๋‹ค. ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์น˜๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋™์ƒ์ด ๋งํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์—๋Š” ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์น˜๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N์ค„์— ๊ฑธ์ณ์„œ ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์น˜๋Š” ์ •์ˆ˜๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ •์ˆ˜๋Š” -10,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ถœ๋ ฅ
ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ N์ค„์— ๊ฑธ์ณ ๋ฐฑ์ค€์ด์˜ ๋™์ƒ์ด ๋งํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก ๋ฐ˜ ์ž˜๋ผ์„œ ์ž‘์€ ์ˆ˜๋ฅผ ๋„ฃ๋Š” ํž™์ด s(mall), ํฐ ์ˆ˜๋ฅผ ๋„ฃ๋Š” ํž™์ด b(ig)์ž„ small์€ ์ตœ๋Œ€ํž™, big์€ ์ตœ์†Œํž™์œผ๋กœ ๊ตฌํ˜„ํ•จ
๐Ÿ’ก ๋‘˜์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ s์— ๋„ฃ๊ณ , ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋ฉด b์— ๋„ฃ์Œ
๐Ÿ’ก ๋งŒ์ผ b์˜ ์ตœ์†Œ๊ฐ’์ด s์˜ ์ตœ๋Œ€๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋‘ ๊ฐœ๋ฅผ ๊ตํ™˜ํ•ด์คŒ

2. ํ•ต์‹ฌ ํ’€์ด

  1. ๋ฐ˜ ์ž˜๋ผ์„œ ์ž‘์€ ์ˆ˜๋ฅผ ๋„ฃ๋Š” ํž™์ด s(mall), ํฐ ์ˆ˜๋ฅผ ๋„ฃ๋Š” ํž™์ด b(ig)์ž„ small์€ ์ตœ๋Œ€ํž™, big์€ ์ตœ์†Œํž™์œผ๋กœ ๊ตฌํ˜„ํ•จ
PriorityQueue<Integer> s = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> b = new PriorityQueue<>();
  1. ๋‘˜์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ s์— ๋„ฃ๊ณ , ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋ฉด b์— ๋„ฃ์Œ
if(s.size() == b.size()) {
	s.add(Integer.parseInt(br.readLine()));
} else {
	b.add(Integer.parseInt(br.readLine()));
}
  1. ๋งŒ์ผ b์˜ ์ตœ์†Œ๊ฐ’์ด s์˜ ์ตœ๋Œ€๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋‘ ๊ฐœ๋ฅผ ๊ตํ™˜ํ•ด์คŒ
if(!s.isEmpty() && !b.isEmpty()) {
	if(b.peek() < s.peek()) {
		int tmp = b.poll();
		b.add(s.poll());
		s.add(tmp);
	}
}

3. ์ฝ”๋“œ

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

public class BOJ_1655 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		int n = Integer.parseInt(br.readLine());
		PriorityQueue<Integer> s = new PriorityQueue<>(Collections.reverseOrder());
		PriorityQueue<Integer> b = new PriorityQueue<>();
		
		for(int i=0; i<n; i++) {
			if(s.size() == b.size()) {
				s.add(Integer.parseInt(br.readLine()));
			} else {
				b.add(Integer.parseInt(br.readLine()));
			}
			
			if(!s.isEmpty() && !b.isEmpty()) {
				if(b.peek() < s.peek()) {
					int tmp = b.poll();
					b.add(s.poll());
					s.add(tmp);
				}
			}
			
			sb.append(Integer.toString(s.peek()));
			sb.append("\n");
		}
		
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}

}

4. ๊ฒฐ๊ณผ


์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€