각 회의실 이름에 맞게 defaultdict(list)로 해주었다.
list로 한 이유는 회의실 예약 시간 여러개를 넣기 위함.
그 후, 각 key 별로 list를 오름차순으로 정렬 후, 전체 dic을 key를 기준으로 정렬해주었다.
전체 딕셔너리를 순회하면서 09~18시 사이에 비어있는 시간대를 확인하며 출력해준다.
주의해야 할 점은 마지막에 -----가 안나온다는 것과, 9는 09로 출력해야 한다는 것이다.
import sys
from collections import defaultdict
n, m = map(int, sys.stdin.readline().split())
room = []
dic = {}
for _ in range(n):
name = sys.stdin.readline().rstrip()
room.append([name, 0, 0])
dic[name] = list()
for _ in range(m):
room_name, start, end = sys.stdin.readline().split()
start, end = int(start), int(end)
dic[room_name].append((start, end))
for k, v in dic.items():
dic[k] = sorted(dic[k], key = lambda x : x[0])
dic = dict(sorted(dic.items()))
cnt = 0
for k, v in dic.items():
cnt += 1
start = 9
print(f"Room {k}:")
total = 0
temp = []
for st, en in v:
if st > start:
total += 1
ran_st = start
ran_en = st
start = en
if ran_st == 9:
temp.append("09-" + str(ran_en))
else:
temp.append(str(ran_st) + "-" + str(ran_en))
elif st == start:
start = en
if total:
if start < 18:
print(f"{total + 1} available:")
temp.append(str(start) + "-18")
else:
print(f"{total} available:")
for s in temp:
print(s)
else:
if start < 18:
print("1 available:")
if start == 9:
print(f"09-18")
else:
print(f"{start}-18")
else:
print("Not available")
if cnt != len(dic):
print("-----")