보물창고 블로그

2018 KAKAO BLINDRECRUITMENT 1차 셔틀버스 본문

알고리즘 풀이/프로그래머스

2018 KAKAO BLINDRECRUITMENT 1차 셔틀버스

홋 메 2020. 3. 26. 15:47
728x90

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/17678

 

프로그래머스

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

programmers.co.kr

timetable안의 시간들을 계산의 편리함을 위해 strptime함수를 이용하여 datetime객체로 변환하고, 버스시간 역시 같은 방식으로 처리한다. 이후 마지막 버스가 오기 전까지 사람들을 버스에 태워서 처리하여 주고, 마지막 버스가 도착하였을 때 카운트를 하여 버스의 수용인원보다 적게 카운트되었다면 버스시간을 반환하고, 만약 버스의 수용인원보다 같거나 크다면 마지막에 탄 사람의 시간보다 1분 빠른 시간을 반환하도록 하였다. 아래는 내가 해결한 코드이다.

def solution(n, t, m, timetable):
    import datetime
    from collections import deque
    nt = deque()
    timetable.sort()
    for p in timetable:
        if p=='24:00':
            continue
        p = datetime.datetime.strptime(p, "%H:%M")
        nt.append(p)
    idx = 0
    bustime = datetime.datetime.strptime('09:00', "%H:%M")
    while idx != n - 1:
        count = 0
        for p in nt:
            if p <= bustime:
                count += 1
                if count == m:
                    break
        for _ in range(count):
            nt.popleft()
        idx += 1
        bustime += datetime.timedelta(minutes=t)
    count = 0
    lp = bustime
    for p in nt:
        if p <= bustime:
            count += 1
            lp = p
            if count == m:
                break
    # 아무것도 카운트 안될 때
    if count < m:
        return bustime.strftime('%H:%M')
    # 뒤에 남음
    else:
        lp = lp - datetime.timedelta(minutes=1)
        return lp.strftime('%H:%M')
Comments