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
'문제 풀이' 카테고리의 다른 글
[프로그래머스] 섬 연결하기 / python (0) | 2020.05.02 |
---|---|
[프로그래머스] N으로 표현 / python (1) | 2020.05.02 |
[프로그래머스] 오픈채팅방 / 2019 카카오 블라인드 채용 / python (0) | 2020.03.11 |
[프로그래머스] [1차] 뉴스 클러스터링 / 2018 카카오 블라인드 채용 / python (0) | 2020.03.11 |
[프로그래머스] [1차] 캐시 / 2018 카카오 블라인드 채용 / python (0) | 2020.03.11 |