import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class 회의실_예약 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
List<String> room = new ArrayList<>();
boolean[][] isReservation = new boolean[N][10];
for(int i = 0; i < N; i++) {
room.add(br.readLine());
}
Collections.sort(room);
for(int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int roomNumber = room.indexOf(st.nextToken());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
for(int j = start; j < end; j++) {
isReservation[roomNumber][j - 9] = true;
}
}
List<String> answer = new ArrayList<>();
for(int i = 0; i < N; i++) {
answer.clear();
System.out.println("Room " + room.get(i) + ":");
String temp = "";
for(int j = 0; j < 10; j++) {
if(isReservation[i][j]) {
if(!temp.isEmpty()) {
answer.add(temp + "-" + "1" + (j - 1));
temp = "";
}
} else {
if(temp.isEmpty()) {
if (j == 0) {
temp = "09";
} else {
temp = "1" + (j - 1);
}
}
}
}
if(!temp.isEmpty() && !temp.equals("18")) {
answer.add(temp + "-18");
}
if(answer.isEmpty()) {
System.out.println("Not available");
} else {
System.out.println(answer.size() + " available:");
for (String s : answer) {
System.out.println(s);
}
}
if(i != N - 1) {
System.out.println("-----");
}
}
}
}
- 2차원 배열을 사용해서 각 회의실의 예약 시간을 체크했다.
- for문 2개로 모두 방문해보며 비어있는 회의 시간을 탐색하여 answer에 push 해주었다.
- 비어있는 시간에 대한 탐색은 비어있는 시간이 존재할 때 temp에 해당 시간을 넣고 예약 시간을 만날 때까지 탐색을 진행한다.
- 비어있는 시간 ~ 예약 시간까지가 이용가능한 회의 시간이라 판단하게 된다.