본문 바로가기
Algorithm

Softeer <회의실 예약>

by seungh2 2022. 5. 18.

Softeer <회의실 예약>

https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=626 

 

Softeer

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

softeer.ai


회의실 예약

N개의 회의실을 9시부터 18시까지 쓸 수 있다.

각 회의실에 대한 예약 현황을 알고 있을 때, 예약 가능한 시간대를 구하여라.

 

입력으로 첫 줄에 회의실의 개수 N과 예약 현황의 개수 m이 들어온다. 그 다음 m개의 줄에 걸쳐 예약 현황에 대한 정보가 들어온다. 이는 (회의실 이름) (예약 시작 시간) (예약 종료 시간) 이 들어온다. (괄호 없이)

 

출력으로 N개의 회의실에 대해 예약 가능한 시간대의 개수와 예약 가능한 시간대를 출력하면 된다.


문제 해결

각 회의실 이름을 key로 하고 예약 현황에 대한 정보를 value로 집어넣기 위해 파이썬을 사용하였다. 

 

info : 회의실 이름이 key, 해당 회의실에 대한 예약 현황의 리스트가 value이다.

 

각 회의실에 대해서 예약 가능한 시간대를 구하는 것은 아래와 같은 과정을 갖는다.

  • 회의실 사용 가능 시간은 9시부터 18시까지이므로 start를 9로 end를 18로 초기값을 설정한다.
  • answer = 예약 가능한 시간대의 리스트
  • reserve = 해당 회의실에 대한 예약 현황 리스트를 회의 시작 시간으로 오름차순 정렬한 리스트
    • 만약 i번째 예약 현황의 회의 시작 시간이 start보다 크다면 start부터 i번째 예약 현황의 회의 시작 시간까지 예약이 가능하므로 answer 배열에 넣는다. start의 값을 i번째 예약 현황의 회의 종료 시간으로 update한다.
    • (start부터 i번째 예약 현황의 회의 시작 시간까지 예약 가능한 시간으로 저장해두었고 i번째 예약 현황의 회의 시작 시간부터 i번째 예약 현황의 회의 종료 시간까지 회의가 진행되기 때문에 회의를 예약할 수 있는 시간은 i번째 예약 현황의 회의 종료 시간이 된다.)
    • 만약 i번째 예약 현황의 회의 시작 시간과 start가 같다면 start의 값을 i번째 예약 현황의 회의 종료 시간으로 update한다.
    • ( start부터 i번째 예약 현황의 회의 종료 시간까지 회의를 하기 때문에 회의를 예약할 수 있는 시간은 i번째 예약 현황의 회의 종료 시간이 된다.)
  • 만약 end의 값과 start의 값이 같지 않다면 start부터 end까지 회의를 예약할 수 있다.

이때 출력 형식에 맞게 출력 문자를 조정해주어야 한다.

예를 들어 9-11시를 09-11로 출력한다던가, 몇 개의 예약 가능한 시간대가 있는지 출력한다던가 등의 문제를 고려해야 한다.

 

또한 회의실 a를 아무도 예약하지 않았을 수도 있기 때문에 딕셔너리에 넣는 과정을 예약 현황을 입력받기 전에 해주어야 한다. 


코드

import sys
n, m = map(int, input().split())
info = {}
room = ["" for _ in range(n)]
for i in range(n):
  room[i] = input()
  info.setdefault(room[i], [])
room = sorted(room)

for _ in range(m):
    name, start, end = map(str, input().split())
    start = int(start)
    end = int(end)
    info[name].append((start, end))
for i in range(n):
    print("Room " + room[i] + ":")
    start = 9
    end = 18
    reserve = sorted(info[room[i]])
    
    answer = []
    for j in range(len(reserve)):
        if reserve[j][0] > start:
            if start == 9:
                answer.append("09-" + str(reserve[j][0]))
            else:
                answer.append(str(start) + "-" + str(reserve[j][0]))
            start = reserve[j][1]
        elif reserve[j][0] == start:
            start = reserve[j][1]
    if end != start:
        if start == 9:
            answer.append("09-" + str(end))
        else:
            answer.append(str(start) + "-" + str(end))
    cnt = len(answer)
    if cnt == 0:
        print("Not available")
    else:
      print(cnt, "available:")
      for j in range(cnt):
          print(answer[j])
    if i != n-1:
      print("-----")

결과


 

728x90

'Algorithm' 카테고리의 다른 글

Softeer <트럭>  (0) 2022.05.18
백준 10799번 <쇠막대기>  (0) 2022.05.18
백준 1021번 <회전하는 큐>  (0) 2022.05.16
SW Expert Academy 1206번 <View>  (0) 2022.05.12
[SW Expert Academy] 1859번 <백만 장자 프로젝트>  (0) 2022.05.12

댓글