1~3초의 처리 기록이 있다고 가정해보자. 

a~b초의 처리 기록이 1~2초의 처리 기록과 '1초라는 범위 안에서 동시에 존재'하기 위해서는 

a의 값은 1+1초 보다 작아야하고 b의 값은 1초 보다 크거나 같아야 하며(a~b초의 막대가 1~1+1초의 범위 안에 존재해야 한다),   
a의 값은 3+1초 보다 작아야하고 b의 값은 3초 보다 크거나 같아야 한다(a~b초의 막대가 3~3+1초의 범위 안에 존재해야 한다). 

times라는 임의의 배열에 주어진 로그들에서 시간을 뽑아 (시작 시간, 끝 시간) 형태로 삽입해주고 

times를 돌면서 각각 time마다 시작시간~시작시간+1초, 끝시간~끝시간+1초 이 2가지 경우를 위의 조건으로 나머지 시간들과 비교해가며 조건에 맞는 나머지 시간들만 카운트한다. 

그리고 현재 최대값, 시작시간~시작시간+1초 결과로 나온 카운트, 끝시간~끝시간+1초 결과로 나온 카운트 중 가장 큰 값을 최대값으로 갱신한다. 

times를 모두 돌면 동일한 최대 처리량을 갖는 1초 구간의 초당 최대 처리량을 알 수 있다.

 

from datetime import datetime, timedelta

def solution(lines):
    def count_log_on_1sec(t):
        cnt = 0
        for idx, time in enumerate(times):
            if time[1] >= t and time[0] < t + timedelta(milliseconds = 1000):
                cnt += 1
        return cnt

    times = []

    for line in lines:
        time, day, delay_sec = line.split(' ')
        end = datetime.strptime(time+' '+day,'%Y-%m-%d %H:%M:%S.%f')
        delay_millisec = int(float(delay_sec[:-1])*1000)
        start = end - timedelta(milliseconds=delay_millisec) + timedelta(milliseconds=1)
        times.append((start, end))

    max_cnt = 0

    for time in times:
        max_cnt = max(max_cnt, count_log_on_1sec(time[0]), count_log_on_1sec(time[1]))   

    return max_cnt

+ 따끈한 최근 게시물