[소프티어] 회의실 예약

이정연·2023년 1월 31일
0

CodingTest

목록 보기
115/165

회의실 예약

과정 설계

입력 중에서 그랜져 방의 예약 가능 시간대 출력을 예시로 들어보겠다.

1단계

시작 시간부터 (종료 시간 -1)까지 리스트에 담는다.
이 리스트가 곧 회의 불가 시간을 가르는 기준이 될 것이다.

2단계

블로그를 작성하며 다시 보니 2단계는 굳이 필요 없긴 하겠다.

8을 추가 하는 이유는 회의 가능 시간을 구하는 공식이 리스트에서 (현재 위치+1)~(다음 위치)까지이기 때문인데 하루 시작 시간이 9시이기 때문이다.

예를 들어, 그랜져 방의 회의 불가 기준 시간이 [11,16,17]이면 9시부터 11시까지는 방을 쓸 수 있다.

따라서 공식에 의거, 8을 추가해야 (8+1)~(11)시까지 회의 가능 시간대로 뽑아낼 수 있다.

3단계

2단계의 공식을 이용해 회의 가능 시간대를 스트링 형태로 리스트에 담는다.

이 때, 9시부터 시작하는 것만 체크 해줬으므로 18시 마감도 체크해줘야 한다.

4단계

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("-----")
profile
0x68656C6C6F21

0개의 댓글