어피치는 장애 대비용 서버 증설 여부를 결정하기 위해 작년 추석 기간인 9월 15일 로그 데이터를 분석한 후 초당 최대 처리량을 계산해보기로 했다. 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다.
date, time, sec = line.split()
h, m, s = time.split(":")
end = int(h)*60*60 + int(m)*60 + float(s)
start = round(end - float(sec[:-1]) + 0.001, 3)
round()
를 쓴 이유,, 안쓰면 "2016-09-15 01:00:04.001 2.0s"의 입력에서 start가 3602.0020000000004와 같이 계산된다. 왜인지는 모르겠는데,, 수치해석에서 배웠던 컴퓨터가 표현할 수 없는 수,, IEEE 754,, 가 스쳐지나가지만 정확히는 모르겠다 ㅠ
checktraffic()
를 이용해서 매 1초구간마다의 최대 처리량을 계산한다. def checktraffic(time, logs):
count = 0
start=time
end=time+1
for log in logs:
if log[1] >= start and log[0] < end:
count += 1
return count
def solution(lines):
answer = 0
ans = 0
logs = []
for line in lines:
date, time, sec = line.split()
h, m, s = time.split(":")
end = int(h)*60*60 + int(m)*60 + float(s)
start = round(end - float(sec[:-1]) + 0.001, 3)
logs.append([start, end])
logs.sort()
time = logs[0][0]
for log in logs:
answer=max(answer,checktraffic(log[0],logs),checktraffic(log[1],logs))
return answer