처리 시간은 끝 시간을 포함하기 때문에, 응답 시작시간은 완료시간-처리시간 + 0.001초이다.
이런 상황에서 요청이 가장 많은 1초를 찾는 것이 목표이다.
[소스코드]
def solution(lines):
# end == Response Completion Time 응답 완료 시각
# start == Response Beginning Time 응답 시작 시각
# processing == Processing Time 응답 처리시간
answer = 0
start_times=[] #1. start와 end를 따로 모은다.
end_times=[]
for line in lines:
start, end = to_miliseconds(line)
start_times.append(start)
end_times.append(end)
for i in range(len(lines)):
cnt=0
cur_end_time=end_times[i] # 2. 끝나는 시간 기준으로 순회한다.
# 응답완료시간 S를 기준으로 오름차순으로 정렬되어있기 때문이다.
# 인덱스가 크면 무조건 늦게 끝난다.
# 시간 기준으로 연속적으로 세는 게 아니라 완료시간 기준으로 띄엄띄엄 센다.
for j in range(i, len(lines)):
if cur_end_time > start_times[j]-1000: # 3. 한 방향으로만 세는 것이 중요한데,
# 세는 시점보다 1초 후 방향으로만 센다. 따라서 이전에 끝난 것들은 고려할 필요X
# '처리중' 이란 말은 '시작했다'는 말과 같다. 그리고 무조건 cur보다 나중에 끝난다
# 따라서 cur보다 뒤에 오는 것들 중 시작시간이 1초 이내로 차이나는 것 cnt증가
cnt+=1
answer =max(answer,cnt)
return answer
def to_miliseconds(line):
time=line.split(" ")
hours=int(time[1][:2])
minutes=int(time[1][3:5])
seconds=int(time[1][6:8])
miliseconds=float(time[1][8:])
end = hours*3600*1000+minutes*60*1000+seconds*1000+miliseconds*1000
start = end-float(time[2][:-1])*1000+1
return[start,end]
def solution(lines): # end == Response Completion Time # start == Response Beginning Time # processing == Processing Time answer = 0 start_times=[] end_times=[] for line in lines: start, end = to_miliseconds(line) start_times.append(start) end_times.append(end) for i in range(len(lines)): cnt=0 cur_end_time=end_times[i] for j in range(i, len(lines)): if cur_end_time > start_times[j]-1000: cnt+=1 answer =max(answer,cnt) return answer def to_miliseconds(line): time=line.split(" ") hours=int(time[1][:2]) minutes=int(time[1][3:5]) seconds=int(time[1][6:8]) miliseconds=float(time[1][8:]) end = hours*3600*1000+minutes*60*1000+seconds*1000+miliseconds*1000 start = end-float(time[2][:-1])*1000+1 return[start,end] Eng
def solution(lines): # end == 응답 완료 시간 # start == 응답 시작 시간 # processing == 처리 시간 answer = 0 start_times=[] end_times=[] for line in lines: start, end = to_miliseconds(line) start_times.append(start) end_times.append(end) for i in range(len(lines)): cnt=0 cur_end_time=end_times[i] for j in range(i, len(lines)): if cur_end_time > start_times[ j]-1000: cnt+=1 answer =max(answer,cnt) return answer def to_miliseconds(line): time=line.split(" ") hours=int(time[1][:2]) minutes=int( time[1][3:5]) seconds=int(time[1][6:8]) miliseconds=float(time[1][8:]) end = 시간*3600*1000+분*60*1000 +seconds*1000+miliseconds*1000 start = end-float(time[2][:-1])*1000+1 return[start,end]