개발자 톡

연습문제 톡 [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

이 카테고리의 톡 더보기