[Softeer] 회의실 예약

최동혁·2023년 2월 1일
0

Softeer

목록 보기
6/10

풀이 방법

각 회의실 이름에 맞게 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("-----")
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글