새소식

Problem solving/문제 풀이 - 2022.05.13

[파이썬] 소프티어 회의실 예약

  • -

문제 확인

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

  • 사이트를 방문하여 문제를 확인해주세요.

나의 풀이

입출력이 까다로워서 조건에 맞게 수정하느라 시간이 꽤 걸렸다. 

시간 정보 - idx 정보를 변환해가면서 풀었는데 [9, 10], [10, 11] 처럼 그냥 시간 형태로 입력에 넣었으면

더 간단하게 풀 수 있었을 것 같다. 

import sys
# 시간 - idx 변환
hour = dict(zip(range(9, 19), range(10)))
idx2hour = dict(zip(range(10), range(9, 19)))
# 방/미팅 수
room_num, meeting_num = map(int, input().split())
# 방 이름 입력
room_name = [input() for _ in range(room_num)]

room_hour = {}
# 방 별 가능 시간 초기화
for name in room_name:
    room_hour[name] = [1 for _ in range(10)]
for _ in range(meeting_num):
    name, start, end = input().split()
    start, end = hour[int(start)], hour[int(end)]
    for idx in range(start, end):
        room_hour[name][idx] = 0
# 알파벳 순 정렬
room_hour = sorted(room_hour.items(), key = lambda x : x[0])
# 마지막 방 
last_room = room_hour[-1][0]
# 방 별로 조회
for name, hour_list in room_hour:
    print(f"Room {name}:")
    # 시작점, 끝점, 개수 초기화
    start, end = 0, 0
    count = 0
    # 출력할 시간 정보 저장
    message = []
    # 시간 정보 조회
    for idx, empty in enumerate(hour_list):
        # 시작 점
        if empty == 1 and start == 0 and idx != len(hour_list) - 1:
            start = idx2hour[idx]
        # 중간 점
        if empty == 0 and start != 0:
            end = idx2hour[idx]
            message.append(f'{start:02}-{end:02}')
            # 시작, 끝점 초기화
            start, end = 0, 0
            count += 1
        # 끝점까지 1인 경우
        if empty == 1 and start != 0 and idx == len(hour_list) - 1:
            end = idx2hour[idx]
            message.append(f'{start:02}-{end:02}')
            count += 1
    if count == 0:
        print("Not available")
    else:
        print(f"{count} available:")
        print(*message, sep = "\n")
    if name != last_room:
        print("-----")

해설 풀이

기업 문제여서 그런지 공식 해설 강의가 존재한다.

idx 처리를 편하게 하기 위해서 방별 시간 정보를 0 ~ 18까지 설정했다.

  • 이 경우 별도의 hour2idx, idx2hour를 설정하지 않아도 되는 장점이 있다. 다른 문제 풀 때 활용하도록 해보자.
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.