title: "[프로그래머스] [1차] 추석 트래픽 Python 파이썬 해설 (Level 3) - 이도훈"
cleanUrl: "programmers/17676"
description: "프로그래머스 Level 3 문제 [[1차] 추석 트래픽]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

END, START = 0, 1 # END에 우선순위를 줘야 함에 주의한다!

def startend(s):
    # 초 단위로 계산해서, 시작 시간과 (종료 시간+1)을 리턴합니다.
    date, hms, duration = s.split()
    endtime = float(hms.split(':')[0]) * 3600 + float(hms.split(':')[1]) * 60 + float(hms.split(':')[2])
    duration = float(duration[:-1])
    
    starttime = endtime - (duration - 0.001)
    return starttime, endtime + 1.0
    
def solution(lines):
    # 모든 interval을 end 방향으로 1초 늘린 뒤, 
    # 한 시점에 존재하는 가장 많은 interval의 개수를 리턴합니다.
    startends = [tuple(startend(s)) for s in lines]
    events = []
    for start, end in startends:
        events.append((end, END))
        events.append((start, START))
    events.sort()
    
    n, mx = 0, -1
    for t, typ in events:
        if typ == START:
            n += 1
            if n > mx:
                mx = n
        else:
            n -= 1
    return mx

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges