개발자 톡
연습문제 톡
[21년 재직자 대회 예선] 회의실 예약
회의실 예약 도와주세요~!
- 등록일
- 2021-12-23 18:03:30
- 조회수
- 1500
- 작성자
- abcyj0724
[21년 재직자 대회 예선] 회의실 예약 문제 질문입니다~!
테스트 케이스에서 오답이 꽤 있네요ㅠㅠ 반례나 잘못된 부분 알려주실 고수 계실까요?
import sys
N, M = map(int,sys.stdin.readline().split())
room = [sys.stdin.readline().rstrip() for n in range(N)]
# 회의 예약 가능 시간 1시간 단위로 생성
conference_room = {}
for room_name in room:
conference_room[room_name] = [[i,i+1] for i in range(9,18)]
# 남은 예약 가능 시간 구하기 = 예약되어 있는 시간 제거
for m in range(M):
r,s,t = sys.stdin.readline().split()
for i in range(int(s),int(t)):
if [i,i+1] in conference_room[r]:
conference_room[r].remove([i,i+1])
for room_name in sorted(conference_room.keys()): # 오름차순 출력
x = conference_room[room_name]
if len(x) == 0: # 남은 시간이 없는 경우
print('Room '+ room_name + ":")
print('Not available')
# 각 회의실에 대한 정보 사이 관련 출력 형식
if room_name == sorted(conference_room.keys())[-1]:
break
else:
print('-----')
continue
elif len(x) == 1: # 남은 시간이 1시간인 경우
print('Room '+ room_name + ":") # 바로 출력
if x[0][0] == 9:
print(str("09-"+str(x[0][1])))
else:
print(str(x[0][0])+"-"+str(x[0][1]))
if room_name == sorted(conference_room.keys())[-1]:
break
else:
print('-----')
continue
else:
result = x[0] # result에 남은 예약 가능 시간 중 첫 1시간 단위
# 남은 시간 연결해서 표현하기
for i in range(len(x)-1):
if x[i][1] in result: # 이번 타임 종료 시간이 result에 있을 경우
if x[i][1] == x[i+1][0]: # 이번 타임 종료 시간과 다음 타임 시작 시간이 같으면
result.remove(x[i][1]) # 같은 시간 삭제
result += [x[i+1][1]] # 다음 타임 종료 시간 추가
else: # 이번 타임 종료 시간과 다음 타임 시작 시간이 다르면
result += [x[i+1][0],x[i+1][1]] # 다음 타임 시작, 종료 시간 추가
else: # 이번 타임 종료 시간이 result에 없을 경우
if x[i][1] == x[i+1][0]: # 이번 타임 종료 시간과 다음 타임 시작 시간이 같으면
result += [x[i][0],x[i+1][1]] # 이번 시작, 다음 종료 시간 추가
else:
result += [x[i][0],x[i][1]]
print('Room '+ room_name + ":")
print(int(len(result)//2),'available:')
for i in range(int(len(result)/2)):
if result[2*i] == 9:
print("09-"+str(result[2*i+1]))
else:
print(str(result[2*i])+"-"+str(result[2*i+1]))
if room_name == sorted(conference_room.keys())[-1]:
break
else:
print('-----')
#[21년_재직자_대회_예선]_회의실_예약
#python