https://www.acmicpc.net/problem/20665
๋ฌธ์
์ฝ๋ก๋ ๋ฐ์ด๋ฌ์ค๋ก ์ฌํ์ ๊ฑฐ๋ฆฌ๋๊ธฐ๊ฐ ํ์ฐฝ์ด๋ค. ํ์ง๋ง ์ด๋ฌํ ์๊ตญ ์ด์ ์๋ ๊ฑฐ๋ฆฌ๋๊ธฐ๊ฐ ์ ์ง์ผ์ง๋ ๊ณณ์ด ์์์ผ๋... ๋ฐ๋ก ๋ ์์ค์ด๋ค.
๋ ์์ค์์ ๊ด๋ฆฌ์๋ก ๊ทผ๋ฌด ์ค์ด๋ ๋ฏผ๊ท๋ ๋๋ผ์ด ์ฌ์ค์ ๋ฐ๊ฒฌํ๋ค. ์ฌ๋๋ค์ ํญ์ ์๋ก ๋ ๋ฉ๋ฆฌ ์์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค๋ ๊ฒ์ด์๋ค.
๋ฏผ๊ท๋ ์ด๋ฌํ ์ฌ์ค์ ๊ด์ฐฐํ์ฌ ์ ์ ๋ฆฌํด๋ณด์๋ค.
- ์ฌ๋๋ค์ ๊ฐ์ฅ ๊ฐ๊น์ด์ ์์์๋ ์ฌ๋์ด ๊ฐ์ฅ ๋จผ ์๋ฆฌ๋ฅผ ์ ํธํ๋ค. ๋ง์ฝ ๋ ์์ค์ ์ด์ฉํ๋ ์ฌ๋์ด ์๋ค๋ฉด ์ข์๋ฒํธ 1๋ฒ ์๋ฆฌ๋ฅผ ๊ฐ์ฅ ์ ํธํ๋ค.
- 1๋ฒ ๊ท์น์ผ๋ก ๋น๊ตํ ์ ์๋ค๋ฉด, ๊ฐ์ฅ ๋จผ ์ข์๋ค ์ค์์ ์ข์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์๋ฆฌ๋ฅผ ์ ํธํ๋ค.
๋ ์์ค ๊ด๋ฆฌ์๋ก ์ค๋ ๊ทผ๋ฌดํ ๋ฏผ๊ท์๊ฒ๋ ์ ํธํ๋ ์ข์์ด ์๋ค. ํ์ง๋ง ๋ฏผ๊ท๋ ๋งค์ฐ ์์ฌํ๊ธฐ ๋๋ฌธ์, ์ฌ๋๋ค์ด ๋ณธ์ธ ๋๋ฌธ์ ์ด์ฉํ๊ณ ์ํ๋ ์๋ฆฌ๋ฅผ ์ด์ฉํ์ง ๋ชปํ๋ ์ผ์ ํผํ๊ณ ์ถ๋ค.
๋ฏผ๊ท๊ฐ ๊ทผ๋ฌดํ๋ ๋ ์์ค์ 09:00 ๋ถํฐ 21:00 ๊น์ง ์ด์๋๋ฉฐ, ์ฒ ์ ํ ์์ฝ์ ๋ก ์ด์๋๊ธฐ ๋๋ฌธ์ ๋ฏผ๊ท๋ ์ฌ๋๋ค์ด ์ธ์ ๋ถํฐ ์ธ์ ๊น์ง ๋ ์์ค์ ์ด์ฉํ๋์ง ์ ์ ์๋ค.
์ด๋ฌํ ์ ๋ณด๋ฅผ ํ ๋๋ก, ๋ฏผ๊ท๋ ์์ ์ด ์ ํธํ๋ ์๋ฆฌ๋ฅผ ์ผ๋ง๋ ์ด์ฉํ ์ ์๋์ง ๊ณ์ฐํด๋ณด๊ณ ์ ํ๋ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ๋ ์์ค ์ข์์ ๊ฐ์ N, ๋ ์์ค ์์ฝ์ ์ T, ๋ฏผ๊ท๊ฐ ์ข์ํ๋ ์ข์ ๋ฒํธ P ๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. (\(1 \leq N \leq 100, 1 \leq T \leq 500, 1 \leq P \leq N \) )
๋ค์ T ๊ฐ์ ์ค์๋ ๋ ์์ค ์ ์ค ์๊ฐ, ๋ ์์ค ํด์ค ์๊ฐ์ด HHMM HHMM ํํ๋ก ์ ๋ ฅ๋๋ค.
(\(0900 \leq HHMM \leq 2100\), 0910 0900์ ๊ฐ์ด ํด์ค ์๊ฐ์ด ์ ์ค ์๊ฐ๋ณด๋ค ๋น ๋ฅธ ๊ฒฝ์ฐ๋ ์๋ค)
์ถ๋ ฅ
๋ฏผ๊ท๊ฐ ์ ํธํ๋ ์ข์์ ์ด์ฉํ ์ ์๋ ์๊ฐ์ด ์ด ๋ช๋ถ์ธ์ง ์ถ๋ ฅํ์์ค.
์ ํ
๋ ์์ค์ ๋ชจ๋ ์ข์์ ๋น์ด์๋ ์ํ๋ก ์์ํ๋ค.
๋ ์์ค ์์ฝ์ด ๊ฐ์ ์๊ฐ์ ์์๋๋ค๋ฉด ์งง์ ์ด์ฉ์๊ฐ์ ๊ฐ์ง ์ฌ๋์ ๋จผ์ ์ํ๋ค.
๋ ์์ค ์์ฝ ๋ฆฌ์คํธ์ ์๋ ์์ฝ์๋ค์ด ์ข์์ด ์์ด์ ๋ชป ์๋ ์ํ๋ ์กด์ฌํ์ง ์๋๋ค.
๋ฏผ๊ท๋ ์ ํธํ๋ ์ข์์ ์ผ๋ง๋ ์ด์ฉํ ์ ์๋์ง ๊ณ์ฐํ๊ณ ์ถ์ดํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ฝ์ธ์๋ค์ด ์๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์์
์ ๋ ฅ
5 6 1
0915 0930
0940 2040
0910 0920
2040 2050
2043 2047
2044 2046
์ถ๋ ฅ
40
09:00 ~ 09:10 ์๊ฐ์๋ 1๋ฒ ์๋ฆฌ๊ฐ ๋น์์ ธ ์์ผ๋ฏ๋ก ๋ฏผ๊ท๊ฐ ์์ ์ ์๋ค. = 10๋ถ
09:10 ์๋ 3๋ฒ ์์ฝ์๊ฐ ์์ ๊ท์น์ ๋ฐ๋ผ 1๋ฒ ์ข์์ ์ด์ฉํ๋ค.
09:15 ์๋ 1๋ฒ ์์ฝ์๊ฐ ์์ ๊ท์น์ ๋ฐ๋ผ 5๋ฒ ์ข์์ ์ด์ฉํ๋ค.
3๋ฒ ์์ฝ์๋ 09:20์ ํด์ค์ด๋ฏ๋ก ๋ฏผ๊ท๋ 09:20 ~ 09:40 ์๊ฐ์ 1๋ฒ ์ข์์ ์์ ์ ์๋ค. = 20๋ถ
09:30 ์๋ 1๋ฒ ์์ฝ์๊ฐ ์ฌ์ฉ์ ์๋ฃํ์ฌ ํด์คํ๋ค.
09:40 ์๋ 2๋ฒ ์์ฝ์๊ฐ ์์ ๊ท์น์ ๋ฐ๋ผ 1๋ฒ ์ข์์ ์ด์ฉํ๋ค.
20:40 ์๋ 2๋ฒ ์์ฝ์๊ฐ ์ฌ์ฉ์ ์๋ฃํ์ฌ ํด์คํ๊ณ ์ด์ด์ 4๋ฒ ์์ฝ์๊ฐ 20:40 ๋ถํฐ 1๋ฒ ์ข์์ฌ์ฉ์ ์์ํ๋ค.
20:43 ์๋ 5๋ฒ ์์ฝ์๊ฐ ์์ ๊ท์น์ ๋ฐ๋ผ 5๋ฒ ์๋ฆฌ๋ฅผ ์ด์ฉํ๋ค.
20:44 ์๋ 6๋ฒ ์์ฝ์๊ฐ ์์ ๊ท์น์ ๋ฐ๋ผ 3๋ฒ ์๋ฆฌ๋ฅผ ์ด์ฉํ๋ค.
20:46 ์๋ 6๋ฒ ์์ฝ์๊ฐ ์ฌ์ฉ์ ์๋ฃํ์ฌ ํด์คํ๊ณ 20:47 ์๋ 5๋ฒ ์ด์ฉ์๊ฐ ์ฌ์ฉ์ ์๋ฃํ์ฌ ํด์คํ๋ค.
20:50 ์๋ 4๋ฒ ์์ฝ์๊ฐ ์ฌ์ฉ์ ์๋ฃํ์ฌ ํด์คํ๋ฏ๋ก ๋ฏผ๊ท๋ 20:50 ~ 21:00 ์๊ฐ์ 1๋ฒ ์ข์์ ์์ ์ ์๋ค. = 10๋ถ
10 + 20 + 10 = 40
ํ์ด
์๋ฎฌ๋ ์ด์
(๊ตฌํ)๋ฌธ์ ๋ก ๊ฐ์ฅ ์ทจ์ฝํ ๋ฌธ์ โผ๏ธ
์ด ๋ฌธ์ ์์ ๊ด๊ฑด์ ์๋ฆฌ ์ฐพ๊ธฐ ์ธ ๋ฏ โผ๏ธ
findSeat(int hour, int min);
๐ for ๋ฌธ์ ๋๋ฉด์ ๊ฐ ์๋ฆฌ์ ์์ฝ์ด ์๋ค๋ฉด, findMinSeatDist๋ก ๊ตฌํ ๊ฐ์ฅ ๊ฐ๊น์ด ์์์๋ ์ฌ๋๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋จผ ์๋ฆฌ๋ฅผ ๊ตฌํ๋ค
findMinSeatDist(int hour, int min, int i);
๐ i ๋ฒ์งธ ์ข์์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์์๋ ์ฌ๋๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค.
boolean isSeat[hour][min][seat]
๐ hour:min ์๊ฐ์ seat ์๋ฆฌ์ ์ฌ๋์ด ์์์๋์ง ์ฌ๋ถ
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class Main_BOJ_20665_๋
์์ค๊ฑฐ๋ฆฌ๋๊ธฐ {
static class time{
int hour;
int min;
time(int hour, int min){
this.hour = hour;
this.min = min;
}
}
static class timePair implements Comparable<timePair>{
time start;
time end;
timePair(time start, time end){
this.start = start;
this.end = end;
}
@Override
public int compareTo(timePair o) {
int result = this.start.hour - o.start.hour;
if(result == 0)
result = this.start.min - o.start.min;
if(result == 0)
result = this.end.hour - o.end.hour;
if(result == 0)
result = this.end.min - o.end.min;
return result;
}
}
static int N, T, P;
static List<timePair> timeList = new ArrayList<>();
static boolean[][][] isSeated;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
N = Integer.parseInt(stringTokenizer.nextToken()); // ์ข์ ๊ฐ์
T = Integer.parseInt(stringTokenizer.nextToken()); // ์์ฝ์ ์
P = Integer.parseInt(stringTokenizer.nextToken()); // ์ข์ํ๋ ์ข์ ๋ฒํธ
isSeated = new boolean[24][60][N+1];
for(int i = 0 ; i < T; i++){
stringTokenizer = new StringTokenizer(br.readLine());
int start = Integer.parseInt(stringTokenizer.nextToken());
int end = Integer.parseInt(stringTokenizer.nextToken());
time startTime = new time(start / 100, start % 100);
time endTime = new time(end / 100, end % 100);
timeList.add(new timePair(startTime, endTime));
}
Collections.sort(timeList);
solve();
}
private static void solve() {
for(timePair time : timeList){
int startHour = time.start.hour;
int startMin = time.start.min;
int endHour = time.end.hour;
int endMin = time.end.min;
int seat = findSeat(startHour, startMin);
for(int hour = startHour ; hour <= endHour ; hour++){
if(startHour == endHour){
for(int min = startMin ; min < endMin ; min++){
isSeated[hour][min][seat] = true;
}
break;
}
if(hour == startHour){
for(int min = startMin ; min < 60 ; min++){
isSeated[hour][min][seat] = true;
}
}
else if(hour == endHour){
for(int min = 0 ; min < endMin ; min++){
isSeated[hour][min][seat] = true;
}
}
else{
for(int min = 0 ; min < 60 ; min++){
isSeated[hour][min][seat] = true;
}
}
}
}
int ans = 0;
for(int hour = 9; hour < 21 ; hour++){
for(int min = 0 ; min < 60 ; min++){
if(!isSeated[hour][min][P])
ans++;
}
}
System.out.println(ans);
}
private static int findSeat(int hour, int min) {
int maxDist = 0;
int idx = -1;
for(int i = 1; i <= N; i++){
if(!isSeated[hour][min][i]){
int dist = findMinSeatDist(hour, min, i);
if(dist > maxDist){
maxDist = dist;
idx = i;
}
}
}
return idx;
}
// ๊ฐ์ฅ ๊ฐ๊น์ด์ ์์์๋ ์ข์๊ฑฐ๋ฆฌ ์ฐพ๊ธฐ
private static int findMinSeatDist(int hour, int min, int i) {
int minDist = 101;
for(int next = 1; next <= N ; next++){
if(next == i) continue;
if(isSeated[hour][min][next]){
int d = Math.abs(i - next);
if(d < minDist)
minDist = d;
}
}
return minDist;
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ๋ฐฑ์ค / BOJ 1715 ] ์นด๋ ์ ๋ ฌํ๊ธฐ ( ์๋ฐ / JAVA ) (0) | 2021.10.28 |
---|---|
[ ๋ฐฑ์ค / BOJ 1717 ] ์งํฉ์ ํํ ( ์๋ฐ / JAVA ) (0) | 2021.10.27 |
[ ๋ฐฑ์ค / BOJ 16928 ] ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ ( ์๋ฐ / JAVA ) (0) | 2021.10.27 |
[ ๋ฐฑ์ค / BOJ 19816 ] ์ซ์ ์นด๋ 2 ( ์๋ฐ / JAVA ) (0) | 2021.10.27 |
[ ๋ฐฑ์ค / BOJ 2776 ] ์๊ธฐ์ ( ์๋ฐ / JAVA ) (0) | 2021.10.21 |