๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2594_๋†€์ด๊ณต์›

๋ฟŒ์•ผ._. 2024. 3. 28. 12:09

Silver III

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

< ๋†€์ด๊ณต์› >

 

๋ฌธ์ œ ํ’€์ด 

 

์ž…๋ ฅ๋ฐ›์€ ์‹œ๊ฐ„์„ ๋ถ„์œผ๋กœ ๋ฐ”๊พผ ํ›„ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํœด์‹์‹œ๊ฐ„์„ ์ฐพ๋Š”๋‹ค.

 

* ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ์—†๋‹ค๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

* 1030 1300/ 1200 1250 ์ž…๋ ฅ์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด 1030๋ถ€ํ„ฐ 1300๊นŒ์ง€ ์šด์˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class _2594_ { // ๋†€์ด๊ณต์›

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		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());

			String x = st.nextToken();
			String y = st.nextToken();

			int start = Integer.parseInt(x.substring(0, 2)) * 60 + Integer.parseInt(x.substring(2, 4));
			int end = Integer.parseInt(y.substring(0, 2)) * 60 + Integer.parseInt(y.substring(2, 4));

			queue.add(new int[] { start, end });
		}

		int result = queue.peek()[0] - 10 - 600;
		int temp[] = null;
		while (!queue.isEmpty()) {
			temp = queue.poll();
			temp[1] += 10;

			while (!queue.isEmpty()) {
				if (temp[1] >= queue.peek()[0] - 10) {
					temp[1] = Math.max(queue.poll()[1] + 10, temp[1]);
				} else {
					result = Math.max(result, queue.peek()[0] - 10 - temp[1]);
					break;
				}
			}
		}

		result = Math.max(result, 22 * 60 - temp[1]);

		if (result < 0)
			result = 0;

		System.out.println(result);
	}
}
๋ณ€์ˆ˜)
n : ๋†€์ด๊ธฐ๊ตฌ ๊ฐœ์ˆ˜
queue : ์šฐ์„ ์ˆœ์œ„ ํ [์‹œ์ž‘์‹œ๊ฐ„, ๋๋‚˜๋Š” ์‹œ๊ฐ„]
x, y : ์šดํ–‰์‹œ์ž‘ ์‹œ๊ฐ, ์ข…๋ฃŒ ์‹œ๊ฐ Stringํ˜•
start, end : ์šดํ–‰์‹œ์ž‘ ์‹œ๊ฐ, ์ข…๋ฃŒ ์‹œ๊ฐ์„ ๋ถ„์œผ๋กœ ๋ฐ”๊พผ ๊ฐ’
result : ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„
temp : ์šดํ–‰์‹œ๊ฐ„

 

๋†€์ด๊ธฐ๊ตฌ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์„ ์–ธํ•˜๋Š”๋ฐ [์šดํ–‰์‹œ์ž‘ ์‹œ๊ฐ„, ์šดํ–‰ ์ข…๋ฃŒ ์‹œ๊ฐ„]์„ ์ €์žฅํ•˜๋ฉฐ ์šดํ–‰ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ๊ฒƒ์„ ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘”๋‹ค. ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๊ฐ™๋‹ค๋ฉด ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ๊ฒƒ์„ ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘”๋‹ค. ๋†€์ด๊ธฐ๊ตฌ ๊ฐœ์ˆ˜๋งŒํผ ์šดํ–‰ ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ์šดํ–‰ ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ์ž…๋ ฅ๋ฐ›์•„ ๋ถ„์œผ๋กœ ๋ฐ”๊พผ ํ›„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ €์žฅํ•œ๋‹ค. 

ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„ result๋ฅผ (์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์˜ ์‹œ์ž‘ ์‹œ๊ฐ„-10) - 600์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) queue์—์„œ ๊ฐ’ poll ํ•œ ํ›„ temp์— ์ €์žฅ

2) ๋†€์ด๊ธฐ๊ตฌ ์ž‘๋™ ๋ฉˆ์ถ˜ ํ›„ 10๋ถ„ ํ›„๊นŒ์ง€ ์‰ด ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒ ์‹œ๊ฐ„+10

3) ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

3-1) temp์˜ ์ข…๋ฃŒ ์‹œ๊ฐ„ ๊ฐ’์ด (queue ๊ฐ’์˜ ์‹œ์ž‘ ์‹œ๊ฐ„ - 10) ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด temp์—์„œ ๊ตฌํ•œ ๋†€์ด๊ธฐ๊ตฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ ๋‹ค์Œ ๋†€์ด๊ธฐ๊ตฌ๋„ ๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ํ˜„์žฌ ์ข…๋ฃŒ์‹œ๊ฐ„๊ณผ (queue ๊ฐ’์˜ ์ข…๋ฃŒ์‹œ๊ฐ„+10) ์ค‘์—์„œ ํฐ ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

3-2) 3-1๋ฒˆ์˜ ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด temp์˜ ๋†€์ด๊ธฐ๊ตฌ๊ฐ€ ๋ฉˆ์ถ”๊ณ  ํœด์‹์‹œ๊ฐ„์„ ๊ฐ€์ง„ ํ›„์— ๋‹ค์Œ ๋†€์ด๊ธฐ๊ตฌ๊ฐ€ ์šดํ–‰๋œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ˜„์žฌ result ๊ฐ’๊ณผ ((๋‹ค์Œ ๋†€์ด๊ธฐ๊ตฌ ์‹œ์ž‘ ์‹œ๊ฐ„-10) - temp ์ข…๋ฃŒ์‹œ๊ฐ„) ์ค‘์—์„œ ํฐ ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ํ˜„์žฌ result ๊ฐ’๊ณผ (์˜คํ›„ 10์‹œ - temp ์ข…๋ฃŒ์‹œ๊ฐ„) ์ค‘์—์„œ ํฐ ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

๋งŒ์•ฝ result ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ์—†๋Š” ๊ฒƒ์ด๋ฏ€๋กœ 0์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

 

์ตœ์ข… result๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.