카테고리 없음

[소프티어 6266번] 회의실 예약(21년 재직자 대회 예선)

킹우현 2024. 6. 23. 09:01

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

import sys

input = sys.stdin.readline

# 회의실은 9시부터 18시까지만 사용 가능
# 회의는 정확히 한 회의실을 연속한 일정 시간 동안만 점유(회의실,시작시간,종료시간)
# 회의의 시작과 종료 시각은 시간 단위로만 설정 가능
# 한 회의가 끝나는 시각에 다른 회의가 시작하는건 가능
# 길이가 0인 회의는 존재 X

# M개의 회의가 주어졌을 때
# 회의실 별로 비어있는 시간대를 출력

n, m = map(int,input().split())

name_list = sorted(list(input().rstrip() for _ in range(n)))

reser_dict = dict() 

for name in name_list:
    reser_dict[name] = [False]*19

for _ in range(m):
    name, start, end = input().split()

    start, end = int(start), int(end)

    for i in range(start,end):
        reser_dict[name][i] = True

for index, name in enumerate(name_list):
    print(f"Room {name}:")

    start, end = -1, -1

    timetable = []

    for i in range(9,18):
        resered = reser_dict[name][i]
        if resered == False:
            if start == -1:
                start = i
                end = i+1
            else:
                end = i+1
        else:
            if end != -1:
                timetable.append((start,end))
                start, end = -1, -1
    if end != -1:
        timetable.append((start,end))
        
    if len(timetable) == 0:
        print("Not available")
        
    else:
        print(f"{len(timetable)} available:")
        for s, e in timetable:
            s = str(s).zfill(2)
            e = str(e).zfill(2)
            print(f"{s}-{e}")
            
    if index != (len(name_list)-1):
        print("-----")

 

이번 문제는 9시부터 18시까지 사용할 수 있는 N개의 회의실에 M개의 회의를 예약한 뒤 남은 시간대를 각각 구하는 문제이다.

 

  1. 먼저 각 회의실마다 예약 현황을 저장할 수 있는 1차원 배열을 선언(reser_dict[name] = [False]*19)
  2. M개의 회의의 시작 시간과 종료 시간까지 1차원 배열을 예약 처리(reser_dict[name][i] = True)
  3. 9시부터 18시까지 순회하며 빈 시간대를 저장(timetable.append((start,end)))

위와 같은 방식으로 풀이할 수 있었는데, 앞으로는 이러한 구현 문제는 어떤 자료구조와 로직을 사용할 것인지 빠르게 판단하고 신속하게 코드를 작성하는 습관을 들여야겠다.