Coding Test/programmers

[Python] 파이썬 프로그래머스 호텔 대실

파송송 2023. 2. 8. 22:27
728x90

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

 

프로그래머스

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

programmers.co.kr


나의 풀이

check in은 +1 chec out은 -1이라고 하면 check in list와 check out list를 tuple을 통해 in인지 out인지 판별한다.

 

여기서 list를 합칠 때

check out list를 앞에 두고 합쳐야한다. 같은 수 정렬은 먼저 들어온 변수가 앞으로 가기 때문이다. 

check in을 앞에 둔다면 10:10 check in 10:10 check out으로 꼬여 새로운 방을 내어주게 된다.

def time_convert(string) :
    h, m = map(int, string.split(":"))
    return h*60 + m

def solution(book_time):

    s_list = [ (time_convert(s),1) for s,e in book_time]
    e_list = [ (time_convert(e)+10,-1) for s,e in book_time]

    book_list = sorted((e_list+s_list), key=lambda x:x[0])

    answer = 0
    book = 0
    for t, c in book_list:
        book += c
        answer = max(answer, book)

    return answer


다른 사람의 풀이

time table을 하나씩 구현하고 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)

728x90