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 |
댓글