본문 바로가기
알고리즘

백준_9203_호텔 예약(해결 못함)

by 매화of사군자 2020. 2. 12.

https://www.acmicpc.net/problem/9203

 

9203번: 호텔 예약

문제 정인이는 Top Root호텔에서 예약을 관리하는 일을 하고 있다. 오늘 정인이는 호텔 예약을 관리하는 소프트웨어에서 버그를 발견했다. 이 버그로 인해서 방이 겹치게 예약되고 잘못 배정되는 일이 발생했다. 이 소프트웨어를 만든 회사는 이미 망해버렸다. 따라서, 정인이는 자신이 직접 버그를 고치고 대책을 세우기로 했다. 먼저, 정인이는 예약 정보를 모두 내보냈다. 이 정보에는 예약 코드와 입실 시간, 퇴실 시간이 적혀져 있다. 이 정보를 이용해서 방을

www.acmicpc.net

처음 생각한 방향

> datetime을 이용하여 연산 후 정렬해서 풀어야겠다.

 

해결 방법

> 들어오는 입력 중 날짜에 관한 정보를 datetime을 이용하여 datatime자료형으로 바꾼다.

> 청소하는 시간을 더한 시간과 입실시간을 저장한다.

> 정렬 후 datetime 연산을 통해서 방을 더 잡아야하는지 그럴 필요가 없는지 판단한다.

 

결과

> 틀렸다.

 

틀린 이유

> 모르겠다. 정답자 5퍼 문제라서 선택하였는데 그래서 그런지 질문이 하나도 없어서 혼자 생각을 해보고 틀린 이유를 알아내야겠다.

 

코드

더보기

import sys, datetime, copy

 

num = int(sys.stdin.readline())

for i in range(num):

    book_num, clean_time = map(int, sys.stdin.readline().split())

    clean_time = divmod(clean_time, 60)

    hotel_info = list()

    for j in range(book_num):

        book_code, in_day, in_day_time, out_day, out_day_time = sys.stdin.readline().split()

        checkin = datetime.datetime.strptime(in_day + " " + in_day_time, '%Y-%m-%d %H:%M')

        checkout = datetime.datetime.strptime(out_day + " " + out_day_time, '%Y-%m-%d %H:%M')

        real_checkout = checkout + datetime.timedelta(hours=clean_time[0], minutes=clean_time[1])

        hotel_info.append((checkin, real_checkout))

    hotel_info.sort(keylambda x : x[1])

    stay = list()

    stay.append(hotel_info[0])

    hotel_info = hotel_info[1:]

    max_room = 0

    count = 1

    for i in hotel_info:

        if i[0] - stay[-1][1] < datetime.timedelta(0):

            count += 1

            stay.append(i)

            max_room = max(len(stay),max_room)

        else:

            pop_count = count

            for j in range(pop_count):

                count -= 1

                stay.pop()

            stay.append(i)

            max_room = max(len(stay), max_room)

    print(max_room)

    

댓글