๋ฌธ์ (์ถ์ฒ: 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๋ฅผ ์ถ๋ ฅํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 14232_๋ณด์ ๋๋ (1) | 2024.04.01 |
---|---|
[Baekjoon] 9440_์ซ์ ๋ํ๊ธฐ (0) | 2024.03.29 |
[Baekjoon] 1730_ํํ (1) | 2024.03.27 |
[Baekjoon] 2167_2์ฐจ์ ๋ฐฐ์ด์ ํฉ (0) | 2024.03.26 |
[Baekjoon] 27172_์ ๋๋๊ธฐ ๊ฒ์ (0) | 2024.03.25 |