[프로그래머스] [1차] 추석 트래픽 문제 풀이 (Python)
풀이
로그들의 리스트가 완료 순서대로 정렬되어 있고 1초간 처리량의 최대값을 구하는 문제이다.
요청이 완료되는 시점(해당 요청을 포함)부터 1초동안 처리 중인 요청의 수를 계산해서 최대값을 찾아 반환하는 방법으로 풀이를 했다.
요청은 "2016-09-15 01:00:04.001 2.0s"와 같이 날짜, 요청완료시각, 처리소요시간 순으로 공백으로 구분되어 문자열로 주어진다.
요청데이터를 가공해서 시간을 비교해야하기 때문에 각 요청의 완료 후 1초, 요청완료시간에서 처리소요시간을 뺀 요청시작시간을 구하는 함수가 필요하다.
요청완료순으로 정렬된 리스트를 순회하면서 기준이되는 요청완료시점부터 1초 후 시각보다 이 후 요소들의 요청시작시각이 작은(빠른) 요청의 경우 1초동안 요청처리가 포함된다고 간주되고 카운트를 하고 최종적으로 1초동안 가장 많은 요청이 처리되는 수를 계산하고 반환한다.
코드
def start_time(log, t):
hh, mm , ss = log
ss = round(float(ss) - float(t) + 0.001, 3)
if ss < 0:
mm = int(mm)-1
ss += 60
if mm < 0:
hh = int(hh)-1
mm = mm + 60
if hh < 0:
return [0, 0, 0]
return [int(hh),int(mm),ss]
def after_1sec(log):
hh, mm , ss = log
ss = round(float(ss) + 0.999, 3)
if ss >= 60:
ss = round(ss - 60, 3)
mm = int(mm) + 1
if mm >= 60:
mm -= 60
hh = int(hh) + 1
if hh >= 60:
return [23, 59, 59.999]
return [int(hh),int(mm),ss]
def is_contain(end, start):
if end[0] < start[0]: return False
if end[1] < start[1]: return False
if end[2] < start[2]: return False
return True
def solution(lines):
answer = 1
lines = list(map(lambda x: [x.split()[1].split(':'), x.split()[2][:-1]], lines))
for i in range(len(lines)-1):
cnt = 1
for j in range(i+1, len(lines)):
if is_contain(after_1min(lines[i][0]), start_time(lines[j][0], lines[j][1])):
cnt += 1
answer = max(answer, cnt)
return answer
Author And Source
이 문제에 관하여([프로그래머스] [1차] 추석 트래픽 문제 풀이 (Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yhd520/프로그래머스-1차-추석-트래픽-문제-풀이-Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)