입력 중에서 그랜져 방의 예약 가능 시간대 출력을 예시로 들어보겠다.
시작 시간부터 (종료 시간 -1)까지 리스트에 담는다.
이 리스트가 곧 회의 불가 시간을 가르는 기준이 될 것이다.
블로그를 작성하며 다시 보니 2단계는 굳이 필요 없긴 하겠다.
8을 추가 하는 이유는 회의 가능 시간을 구하는 공식이 리스트에서 (현재 위치+1)~(다음 위치)까지이기 때문인데 하루 시작 시간이 9시이기 때문이다.
예를 들어, 그랜져 방의 회의 불가 기준 시간이 [11,16,17]이면 9시부터 11시까지는 방을 쓸 수 있다.
따라서 공식에 의거, 8을 추가해야 (8+1)~(11)시까지 회의 가능 시간대로 뽑아낼 수 있다.
2단계의 공식을 이용해 회의 가능 시간대를 스트링 형태로 리스트에 담는다.
이 때, 9시부터 시작하는 것만 체크 해줬으므로 18시 마감도 체크해줘야 한다.
3단계의 리스트를 이용해 정해진 양식에 맞추어 출력한다.
from collections import defaultdict
n,m = map(int,input().split())
reserve = defaultdict(list)
answer = defaultdict(list)
# 1,2
for i in range(n):
room = input()
reserve[room].append(8)
answer[room]
for i in range(m):
r,s,t = input().split()
s,t = int(s),int(t)
for i in range(s,t):
reserve[r].append(i)
for r in reserve:
reserve[r] = sorted(reserve[r])
# 3
for r in reserve:
for i in range(len(reserve[r])):
start = reserve[r][i]+1
if i != len(reserve[r])-1:
end = reserve[r][i+1]
else:
end = 18
if start == end:
continue
if start == 9:
start = "09"
else:
start = str(start)
end = str(end)
answer[r].append(start+"-"+end)
# 4
answer = sorted(answer.items(),key= lambda item: item[0])
for i in range(len(answer)):
room,time = answer[i][0], answer[i][1]
print("Room {0}:".format(room))
if time == []:
print("Not available")
else:
print("{0} available:".format(len(time)))
for t in time:
print(t)
if i != len(answer)-1:
print("-----")