입출력 예시
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 형태의 누적합을 사용하자.