programmers- lv.2 (호텔 대실)

이예송·2023년 8월 28일

PS

목록 보기
84/97

문제링크: 호텔 대실

✍🏻 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문 없이 풀 수 있다고 한다.

0개의 댓글