๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 12764_์‹ธ์ง€๋ฐฉ์— ๊ฐ„ ์ค€ํ•˜

๋ฟŒ์•ผ._. 2023. 8. 17. 11:45

Gold III

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

< ์‹ธ์ง€๋ฐฉ์— ๊ฐ„ ์ค€ํ•˜ >

 

๋ฌธ์ œ ํ’€์ด 

 

์šฐ์„ ์ˆœ์œ„ ํ 2๊ฐœ์™€ ArrayList, boolean ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ a์—๋Š” ์ปดํ“จํ„ฐ ์ด์šฉ ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ์ž…๋ ฅ๋ฐ›์•„ ์ €์žฅํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ด์šฉ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ, ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๊ฐ™๋‹ค๋ฉด ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ b์—๋Š” ์ปดํ“จํ„ฐ ์ข…๋ฃŒ ์‹œ๊ฐ„๊ณผ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ, ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ๊ฐ™๋‹ค๋ฉด ๋ฒˆํ˜ธ๊ฐ€ ๋น ๋ฅธ ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ๋‹ค.

 

๋ฌธ์ œ์—์„œ ๋น„์–ด์žˆ๋Š” ์ž๋ฆฌ ์ค‘์—์„œ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์ž๋ฆฌ์— ์•‰๋Š” ๊ฒƒ์ด ๊ทœ์น™์ด๋ผ ํ–ˆ์œผ๋ฏ€๋กœ ๋จผ์ € ๋‹ค์Œ ์‚ฌ๋žŒ์ด ๋“ค์–ด์™”์„ ๋•Œ ์ข…๋ฃŒ๋˜๋Š” ์ปดํ“จํ„ฐ๋“ค์„ ์šฐ์„ ์ˆœ์œ„ ํ b์—์„œ poll ํ•ด์ค€๋‹ค. ๊ทธ ํ›„์— ๋น„์–ด์žˆ๋Š” ์ž๋ฆฌ ์ค‘์— ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ณณ์œผ๋กœ ์‚ฌ๋žŒ์„ ๋ณด๋‚ธ๋‹ค.

 

 

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

public class _12764_ { // ์‹ธ์ง€๋ฐฉ์— ๊ฐ„ ์ค€ํ•˜

	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 n = Integer.parseInt(bf.readLine());

		PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {

			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[0] == o2[0])
					return o1[1] - o2[1];
				return o1[0] - o2[0];
			}
		});

		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());
			queue.add(new int[] { Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()) });
		}

		PriorityQueue<int[]> computer = new PriorityQueue<>(new Comparator<int[]>() {

			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[0] == o2[0])
					return o1[1] - o2[1];
				return o1[0] - o2[0];
			}
		});
		ArrayList<Integer> result = new ArrayList<>();
		result.add(0);

		boolean check[] = new boolean[n + 1];

		result.add(1);
		check[1] = true;
		computer.add(new int[] { queue.poll()[1], 1 });
		while (!queue.isEmpty()) {
			int temp[] = queue.poll();
			int idx = Integer.MAX_VALUE;
			while (!computer.isEmpty() && computer.peek()[0] < temp[0]) {
				check[computer.poll()[1]] = false;
			}
			
			for (int i = 1; i < n + 1; i++) {
				if (!check[i]) {
					idx = i;
					check[idx]=true;
					break;
				}
			}
			
			if (result.size() > idx) {
				result.set(idx, result.get(idx) + 1);
			} else {
				result.add(1);
			}
			computer.add(new int[] { temp[1], idx });
		}

		bw.write(result.size() - 1 + "\n");
		for (int i = 1; i < result.size(); i++) {
			bw.write(result.get(i) + " ");
		}
		bw.flush();
	}
}

 

Main

๋ณ€์ˆ˜)
n : ์‚ฌ๋žŒ์˜ ์ˆ˜
queue : ์šฐ์„ ์ˆœ์œ„ ํ [์ปดํ“จํ„ฐ ์ด์šฉ ์‹œ์ž‘ ์‹œ๊ฐ„, ์ปดํ“จํ„ฐ ์ด์šฉ ์ข…๋ฃŒ ์‹œ๊ฐ„] 
computer : ์šฐ์„ ์ˆœ์œ„ ํ [์ปดํ“จํ„ฐ ์ด์šฉ ์ข…๋ฃŒ ์‹œ๊ฐ„, ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ]
result : ๊ฐ ์ž๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜ ์ €์žฅ
check : ์ž๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€

 

- ์‚ฌ๋žŒ์˜ ์ˆ˜(n) ์ž…๋ ฅ

- ๊ฐ ์‚ฌ๋žŒ์˜ ์ปดํ“จํ„ฐ ์ด์šฉ ์‹œ์ž‘ ์‹œ๊ฐ๊ณผ ์ข…๋ฃŒ ์‹œ๊ฐ์„ ์ž…๋ ฅ๋ฐ›์•„ ์šฐ์„ ์ˆœ์œ„ ํ(queue)์— ์ €์žฅ

- ์šฐ์„ ์ˆœ์œ„ ํ(queue)์— ์ €์žฅ๋œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ์šฐ์„ ์ˆœ์œ„ ํ(computer)์— ์ €์žฅ ๋ฐ ์ปดํ“จํ„ฐ ์ฒซ ๋ฒˆ์งธ ์ž๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๊ณ  ํ‘œ์‹œ(check)์™€ ๊ฐ ์ž๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด result์— ๊ฐ’ ์ถ”๊ฐ€

- queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

: ๋‹ค์Œ ์‚ฌ๋žŒ์˜ ์ปดํ“จํ„ฐ ์‹œ์ž‘ ์‹œ๊ฐ„๋ณด๋‹ค ๋นจ๋ฆฌ ๋๋‚˜๋Š” ์ž๋ฆฌ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด queue์—์„œ ๋ฝ‘์•„์˜จ ์‹œ์ž‘ ์‹œ๊ฐ„๋ณด๋‹ค computer์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์˜ ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด ๋น ๋ฅธ ๊ฒฝ์šฐ computer์—์„œ poll ํ•ด์ฃผ๋ฉฐ ๊ทธ ์ž๋ฆฌ๋ฅผ ๋นˆ์ž๋ฆฌ๋กœ ์ €์žฅ (์‹œ์ž‘ ์‹œ๊ฐ„๋ณด๋‹ค ๋นจ๋ฆฌ ๋๋‚˜๋Š” ์ž๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค)

: ์ปดํ“จํ„ฐ ์ž๋ฆฌ๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜์—ฌ ๋นˆ์ž๋ฆฌ ์ฐพ๊ธฐ

: ๋นˆ์ž๋ฆฌ๊ฐ€ result์˜ size๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์›๋ž˜ ์žˆ๋˜ ์ž๋ฆฌ๊ฐ€ ๋นˆ ๊ฒƒ์ด๋ฏ€๋กœ result ๊ฐ’ +1

: ๋นˆ์ž๋ฆฌ๊ฐ€ result์˜ size๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์ž๋ฆฌ๋ž€ ๋œป์ด๋ฏ€๋กœ result์— ๊ฐ’ ์ถ”๊ฐ€

: computer์— ๊ฐ’ ์ถ”๊ฐ€

- ์ปดํ“จํ„ฐ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜์™€ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ์ž๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜ ์ถœ๋ ฅ