코테 준비/프로그래머스

[level 2] 호텔 대실

쿠쿠*_* 2023. 5. 26. 14:07

https://school.programmers.co.kr/learn/courses/30/lessons/155651

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

가장 생각든 접근법은 

1) '대실 시작 시각'을 기준으로 sort()해주기

2) 들어갈 수 있는 시간이 없으면 ROOM을 하나 생성해서 만들어주기

3) 최종적으로 나오는 ROOM의 개수를 return

=> 그런데 실제 풀이를 보면 달랐다. 우선 sort를 하되, dict를 이용해서 max값을 구하거나 heap을 이용해서 pop,push를 반복적으로 사용해서 구하는 방법을 사용했다. 결국 누적합 문제였던걸로..

def time2val(time):
    return int(time[:2])*60+int(time[3:5])

def solution(book_time):
    dic={}
    for book in book_time:
        start=time2val(book[0])
        end=time2val(book[1])
        
        for t in range(start,end+10):
            if dic.get(t)==None:
                dic[t]=1
            else:
                dic[t]+=1
    return max(dic.values())
from heapq import heappop, heappush

def solution(book_time):
    answer = 1
    
    # "HH:MM" → HH * 60 + MM
    book_time_ref = [(int(s[:2]) * 60 + int(s[3:]), int(e[:2]) * 60 + int(e[3:])) for s, e in book_time]
    book_time_ref.sort()
    
    heap = []
    for s, e in book_time_ref:
        if not heap:
            heappush(heap,e)
            continue
        if heap[0] <= s:
            heappop(heap)
        else:
            answer += 1
        heappush(heap,e+10)
    
    return answer
from heapq import heappop, heappush

def solution(book_time):
    rooms = []
    book_time.sort(key = lambda _:_[0])
    for book in book_time :
        check_in = num(book[0])
        check_out = num(book[1]) + 10
        if len(rooms) != 0 and rooms[0] <= check_in :
            heappop(rooms)
        heappush(rooms,check_out)
    return len(rooms)

def num(HHMM) :
    return 60*int(HHMM[:2]) + int(HHMM[3:])

'코테 준비 > 프로그래머스' 카테고리의 다른 글

[SQL_SUM,MAX,MIN]  (0) 2023.06.12
[SQL_SELECT]  (1) 2023.06.12
[level 2] 점 찍기  (0) 2023.05.26
[level 2] 택배상자  (0) 2023.05.23
[level 2] k진수에서 소수 개수 구하기  (1) 2023.05.14