๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2696_์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ

๋ฟŒ์•ผ._. 2023. 7. 19. 16:33

Gold II

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

< ์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ >

 

๋ฌธ์ œ ํ’€์ด 

 

๋ฐฑ์ค€ 1655๋ฒˆ ๋ฌธ์ œ์™€ ๋งค์šฐ ๋น„์Šทํ•œ ๋ฌธ์ œ์ด๋‹ค. 

https://melody-coding.tistory.com/342

 

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

Gold II๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1655) ๋ฌธ์ œ ํ’€์ด  ์šฐ์„ ์ˆœ์œ„ ํ 2๊ฐœ(left: ๋‚ด๋ฆผ์ฐจ์ˆœ, right: ์˜ค๋ฆ„์ฐจ์ˆœ)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” left์— ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋‹ค์Œ ๊ฐ’์„ ๋ณด๊ณ  left que

melody-coding.tistory.com

 

1655๋ฒˆ ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์ ์€ ํ™€์ˆ˜๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ฝ์„ ๋•Œ๋งˆ๋‹ค ์ค‘์•™๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 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;
import java.util.StringTokenizer;

public class _2696_ { // ์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ

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

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

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

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

			bw.write(Integer.toString(m / 2 + 1) + "\n");
			int idx = 0;
			for (int j = 0; j < (m / 10 + 1); j++) {
				st = new StringTokenizer(bf.readLine());

				while (st.hasMoreTokens()) {
					int num = Integer.parseInt(st.nextToken());
					idx += 1;

					if (left.size() == 0)
						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 (idx % 2 == 1) {
						if (left.size() > right.size()) {
							bw.write(Integer.toString(left.peek()) + " ");
						} else {
							bw.write(Integer.toString(right.peek()) + " ");
						}
						if ((idx / 2 + 1) % 10 == 0)
							bw.write("\n");
					}
				}
			}

			bw.append("\n");
			left.clear();
			right.clear();
		}
		bw.flush();
	}
}

 

Main

๋ณ€์ˆ˜)
t : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜
left : ๋‚ด๋ฆผ์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ
right : ์˜ค๋ฆ„์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ
m : ์ˆ˜์—ด์˜ ํฌ๊ธฐ
idx : ํ˜„์žฌ๊นŒ์ง€ ์ฝ์€ ์›์†Œ ์ˆ˜
num : ์ˆ˜์—ด์˜ ์›์†Œ

 

- ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜(t) ์ž…๋ ฅ

- ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜๋งŒํผ ์ˆ˜์—ด์˜ ํฌ๊ธฐ์™€ ์ˆ˜์—ด ์ž…๋ ฅ

- ์ˆ˜์—ด์˜ ํฌ๊ธฐ(m)๋ฅผ ์ด์šฉํ•ด์„œ ์ค‘์•™๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•จ

: (m / 2 ) + 1

- ์›์†Œ๊ฐ€ 10๊ฐœ์”ฉ ๋‚˜๋ˆ„์–ด์ ธ์„œ ์ž…๋ ฅ๋˜๋ฏ€๋กœ [์ˆ˜์—ด์˜ ํฌ๊ธฐ(m)/10 +1] ๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ ์›์†Œ ์ž…๋ ฅ

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

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

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

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

5) ๊ฒฐ๊ณผ ์ถœ๋ ฅ

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