Search

호텔 대실

입출력 예시

book_time
result
[["15:00", "17:00"], ["16:40", "18:20"], ["14:20", "15:20"], ["14:10", "19:20"], ["18:20", "21:20"]]
3
[["09:10", "10:10"], ["10:20", "12:20"]]
1
[["10:20", "12:30"], ["10:20", "12:30"], ["10:20", "12:30"]]
3

나의 코드

def solution(book_time): for i, x in enumerate(book_time): start, end = x[0].split(':'), x[1].split(':') start = int(start[0])*60 + int(start[1]) end = int(end[0])*60 + int(end[1]) + 10 book_time[i] = [start, end] # [620, 640] book_time.sort(key=lambda x: x[0]) # 시작 시간 기준으로 정렬 n_rooms = 0 while book_time: cur_end = book_time[0][1] # 현재 가장 빨리 끝나는 시간 indices = [0] for i in range(len(book_time)): if cur_end <= book_time[i][0]: # 현재 가장 빨리 끝나는 시간보다 시작 시간이 더 늦으면 indices.append(i) cur_end = book_time[i][1] for i in indices[::-1]: # 뒤에서부터 지워야 인덱스가 꼬이지 않음 book_time.pop(i) n_rooms += 1 return n_rooms
Python
복사

다른 풀이

def time2min(time): hr = int(time[:2]) mn = int(time[3:]) return hr*60 + mn def solution(book_time): tables = [0 for _ in range(60*24)] # tables[i] = i분에 예약된 방의 수 for book in book_time: start = time2min(book[0]) end = time2min(book[1]) tables[start] += 1 # start에 예약이 들어옴 tables[end] -= 1 # end에 예약이 끝남 n_rooms = 0 # 현재 예약된 방의 수 for i in range(len(tables)): # i분에 예약된 방의 수를 누적합으로 바꿈 n_rooms += tables[i] tables[i] = n_rooms return max(tables) # 가장 많이 예약된 방의 수
Python
복사

개선점 분석

예약이 겹치지 않도록 할 때는 table 형태의 누적합을 사용하자.