๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1655_๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”

๋ฟŒ์•ผ._. 2023. 7. 19. 15:10

Gold II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1655)

< ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š” >

 

๋ฌธ์ œ ํ’€์ด 

 

์šฐ์„ ์ˆœ์œ„ ํ 2๊ฐœ(left: ๋‚ด๋ฆผ์ฐจ์ˆœ, right: ์˜ค๋ฆ„์ฐจ์ˆœ)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

์ฒ˜์Œ์—๋Š” left์— ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋‹ค์Œ ๊ฐ’์„ ๋ณด๊ณ  left queue์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’ ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด๋ผ๋ฉด left queue์— ๋„ฃ์–ด์ค€๋‹ค. ๋งŒ์•ฝ right queue์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’ ๋ณด๋‹ค ํฌ๋‹ค๋ฉด right queue์— ๋„ฃ์–ด์ค€๋‹ค.

๊ฐ€์šด๋ฐ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ’์„ ๋„ฃ์„ ๋•Œ๋งˆ๋‹ค left์™€ right queue์˜ size ์ฐจ์ด๊ฐ€ 2 ์ด์ƒ ๋‚œ๋‹ค๋ฉด 1 ์ฐจ์ด ๋˜๋Š” ๊ฐ™๋„๋ก ๋งž์ถฐ์ค€๋‹ค.

 

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

์™ผ์ชฝ: ๋‚ด๋ฆผ์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ/์˜ค๋ฅธ์ชฝ: ์˜ค๋ฆ„์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ

 

 

 my solution (Java)

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

public class _1655_ { // ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int n = Integer.parseInt(bf.readLine());

		PriorityQueue<Integer> left = new PriorityQueue<>(Collections.reverseOrder());
		PriorityQueue<Integer> right = new PriorityQueue<>();

		for (int i = 0; i < n; i++) {
			int num = Integer.parseInt(bf.readLine());

			if (left.size() < 1) {
				left.add(num);
			} else {
				if ((right.size()>0 && right.peek() >= num)|| left.peek()>=num)
					left.add(num);
				else
					right.add(num);

				if (left.size() - right.size() > 1) {
					int temp = left.poll();
					right.add(temp);
				} else if (right.size() - left.size() > 1) {
					int temp = right.poll();
					left.add(temp);
				}
			}
			if ((i + 1) % 2 == 0) {
				bw.write(Integer.toString(left.peek()) + "\n");
			} else {
				if (left.size() > right.size())
					bw.write(Integer.toString(left.peek()) + "\n");
				else
					bw.write(Integer.toString(right.peek()) + "\n");
			}
		}
		bw.flush();
	}
}

 

Main

๋ณ€์ˆ˜)
n : ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜
left : ๋‚ด๋ฆผ์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ
right : ์˜ค๋ฆ„์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ
num : ์™ธ์น˜๋Š” ์ •์ˆ˜

 

- ์™ธ์น˜๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜(n) ์ž…๋ ฅ

- ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ์™ธ์น˜๋Š” ์ •์ˆ˜(num) ์ž…๋ ฅ

1) left ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด left ์šฐ์„ ์ˆœ์œ„ ํ์— num ์ถ”๊ฐ€

2) right ์šฐ์„ ์ˆœ์œ„ ํ์— ๊ฐ’์ด ์žˆ์œผ๋ฉด์„œ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ left ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด left ์šฐ์„ ์ˆœ์œ„ ํ์— num ์ถ”๊ฐ€

3) 2)์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด(= right ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด) right ์šฐ์„ ์ˆœ์œ„ ํ์— num ์ถ”๊ฐ€

4) ์ค‘๊ฐ„ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ left ์šฐ์„ ์ˆœ์œ„ ํ์™€ right ์šฐ์„ ์ˆœ์œ„ ํ์˜ size๋ฅผ ๋ณด๊ณ  size๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ 1 ์ฐจ์ด ๋‚˜๋„๋ก ์ˆ˜์ •

5) ๊ฒฐ๊ณผ ์ถœ๋ ฅ
: ํ˜„์žฌ๊นŒ์ง€ ์ •์ˆ˜๋ฅผ ์ง์ˆ˜๊ฐœ ์™ธ์ณค๋‹ค๋ฉด ๋‘ ์ˆ˜ ์ค‘์—์„œ ์ž‘์€ ์ˆ˜๋ฅผ ๋งํ•ด์•ผ ํ•˜๋ฏ€๋กœ left ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅ

: ํ˜„์žฌ๊นŒ์ง€ ์ •์ˆ˜๋ฅผ ํ™€์ˆ˜๊ฐœ ์™ธ์ณค๋‹ค๋ฉด left์™€ right ์šฐ์„ ์ˆœ์œ„ ํ ์ค‘์—์„œ size๊ฐ€ ํฐ ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅ