문제링크: 호텔 대실
✍🏻 Information
| content | |
|---|---|
| 언어 | python |
| 난이도 | ⭐️⭐️ |
| 풀이시간 | 20분 |
| 제출횟수 | 1 |
| 인터넷검색유무 | yes |
🍒 My Code
def solution(book_time):
answer = 0
rooms = []
#book_time 시작시간을 기준으로 정렬
book_time = sorted(book_time,key=lambda x:x[0])
#시간을 분으로 바꿈
for i in range(len(book_time)):
for j in range(len(book_time[0])):
book_time[i][j]=int(book_time[i][j].split(":")[0])*60+int(book_time[i][j].split(":")[1])
for i in range(len(book_time)):
flag=0
if len(rooms)==0:
#청소가 끝난 시간을 append
rooms.append(book_time[i][1]+10)
answer+=1
else:
for j in range(len(rooms)):
if rooms[j]<=book_time[i][0]:
#기존 방 사용가능
rooms[j]=book_time[i][1]+10
flag=1
break
#기존 방 사용 불가 - 방 하나 추가
if flag==0:
answer+=1
rooms.append(book_time[i][1]+10)
return answer
💡 What I learned
list의 n번째 값을 기준으로 정렬: sorted(list_이름, key = lambda x:x[n])조건이 여러개일 경우 정렬: lambda x: 뒤에 붙는 값을 여러 조건을 tuple에 담은 형태로 작성my_data_list = sorted(my_data_list, key=lambda x: (x[1], -x[0]))
-> 각 값의 2번째 값을 기준으로 오름차순, 1번째 값을 기준으로 내림차순 정렬
def solution(book_time):
time_table = [0 for _ in range(60 * 24)]
for start, end in book_time:
start_minutes = 60 * int(start[:2]) + int(start[3:])
end_minutes = 60 * int(end[:2]) + int(end[3:]) + 10
if end_minutes > 60 * 24 - 1:
end_minutes = 60 * 24 - 1
for i in range(start_minutes, end_minutes):
time_table[i] += 1
return max(time_table)
-> 스타트 부분은 +1, 끝 부분은 -1 만하고 나중에 한번에 누적합을 구하면 이중for문 없이 풀 수 있다고 한다.