๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 21773_๊ฐ€ํฌ์™€ ํ”„๋กœ์„ธ์Šค 1

๋ฟŒ์•ผ._. 2023. 7. 24. 10:35

Gold V

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

< ๊ฐ€ํฌ์™€ ํ”„๋กœ์„ธ์Šค 1>

 

๋ฌธ์ œ ํ’€์ด 

 

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ๊ฐ’์ด ์ œ์ผ ํฐ ํ”„๋กœ์„ธ์Šค ์ค‘ id ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณจ๋ผ์ค๋‹ˆ๋‹ค. 1์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ 1 ์ƒ์Šนํ•œ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ ๋‚˜๋จธ์ง€๋ฅผ ๋‹ค 1 ์ƒ์Šน์‹œํ‚ค๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ค ๋ฐ˜๋Œ€๋กœ ๊ณจ๋ผ์ค€ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ 1 ์ค„์—ฌ์ค๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์‹œ๊ฐ„๋„ 1 ์ค„์ธ ํ›„ ์‹œ๊ฐ„์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค์‹œ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

 

 my solution (Java)

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

public class _21773_ { // ๊ฐ€ํฌ์™€ ํ”„๋กœ์„ธ์Šค 1

	public static class Process implements Comparable<Process> {
		int id;
		int time;
		int level;

		public Process(int id, int time, int level) {
			this.id = id;
			this.time = time;
			this.level = level;
		}

		@Override
		public int compareTo(Process o) {
			if (level == o.level)
				return id - o.id;
			return o.level - level;
		}

	}

	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 = new StringTokenizer(bf.readLine());

		int t = Integer.parseInt(st.nextToken());
		int n = Integer.parseInt(st.nextToken());

		PriorityQueue<Process> queue = new PriorityQueue<>();

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

		for (int i = 0; i < t; i++) {
			if (queue.isEmpty())
				break;
			Process process = queue.poll();
			bw.write(process.id + "\n");

			process.time -= 1;

			if (process.time > 0) {
				process.level -= 1;
				queue.add(process);
			}
		}
		bw.flush();
	}
}

 

Main

๋ณ€์ˆ˜)
Process : id, ์‹œ๊ฐ„(time), ์šฐ์„ ์ˆœ์œ„(level) / ์ •๋ ฌ : ์šฐ์„ ์ˆœ์œ„ ๋‚ด๋ฆผ์ฐจ์ˆœ > id ์˜ค๋ฆ„์ฐจ์ˆœ
t : t ์ดˆ
n : ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜
queue : Process ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ
a : id
b : ์‹คํ–‰์„ ๋งˆ์น˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„
c : ์ดˆ๊ธฐ ์šฐ์„ ์ˆœ์œ„

 

- ์‹œ๊ฐ„(t)๊ณผ ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜(n) ์ž…๋ ฅ

- ํ”„๋กœ์„ธ์Šค์˜ id(a), ์‹คํ–‰์„ ๋งˆ์น˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„(b), ์ดˆ๊ธฐ ์šฐ์„ ์ˆœ์œ„(c)๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ qeuue์— ์ €์žฅ

- t์ดˆ๋งŒํผ ๋ฐ˜๋ณต

: ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋‚จ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์ข…๋ฃŒ

: queue์—์„œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์ด ์ œ์ผ ํฌ๊ณ  id๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ํ”„๋กœ์„ธ์Šค ๋ฝ‘๊ธฐ

: ํ”„๋กœ์„ธ์Šค ์‹œ๊ฐ„์„ 1์ดˆ ์ค„์ธ ํ›„ ์•„์ง ์‹œ๊ฐ„์ด ๋‚จ์•˜๋‹ค๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ 1 ์ค„์ธ ํ›„ queue์— ์ €์žฅ

- ๋‹ต ์ถœ๋ ฅ