[Python3] 프로그래머스 상담예약제

민갱·2023년 7월 2일

CT

목록 보기
21/35

Merge Sort와 비슷한 느낌으로 구현해주시면 됩니다. string의 시간을 적절히 숫자로 바꿔주는 작업이 필요합니다. 필수로 필요하진 않지만 예외처리를 줄이기 위해 booked/unbooked 끝에 dummy data를 추가하였습니다.


def parse_time(t):
    h,m = t.split(':')
    return int(h)*60 + int(m)

def solution(booked, unbooked):
    
    booked = [(parse_time(t), name) for t, name in booked] + [(1000000, None)]
    unbooked = [(parse_time(t), name) for t, name in unbooked] + [(1000000, None)]
    booked.sort()
    unbooked.sort()
    t,b,u,answer = 0,0,0,[]
    while b < len(booked) and u < len(unbooked):
        t1, t2 = booked[b][0], unbooked[u][0]
        if t1 <= t:
            answer.append(booked[b][1])
            b += 1
            t += 10
        elif t2 <= t:
            answer.append(unbooked[u][1])
            u += 1
            t += 10
        else:
            t = min(t1,t2)
    answer.pop()
    return answer
booked = [(parse_time(t), name) for t, name in booked] + [(1000000, None)]
==> [(595, 'hae'), (605, 'jee'), (1000000, None)]

Note

  • 출력 내용이 아래와 같은데 () 안에 요소가 있지만, booked[0][0] 으로 호출하면 595가 반환되고 booked[0][1]을 호출하면 hae가 호출 된다.
  • t1 과 t2가 같아지는 경우는 예약한 내용이 더 먼저 호출되어야 하기 떄문에 if t1<= t 을 먼저 조건으로 걸어주었고, 해당 조건을 탄다.
profile
가보자고

0개의 댓글