문제 설명 및 제한사항
아이디어 및 해결 방법
코드
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
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges