[프로그래머스] 추석트래픽

김우경·2021년 2월 8일
0

알고리즘

목록 보기
56/69

문제링크

추석 트래픽

문제 설명

어피치는 장애 대비용 서버 증설 여부를 결정하기 위해 작년 추석 기간인 9월 15일 로그 데이터를 분석한 후 초당 최대 처리량을 계산해보기로 했다. 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다.

문제 풀이

  1. lines의 시간을 처리한다.
    datetime 함수가 있다고 하는데, 익숙하지 않아서 그냥 split()을 이용해서 분리하고, 초단위로 퉁쳤다.
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,, 가 스쳐지나가지만 정확히는 모르겠다 ㅠ

  1. 초당 최대 처리량 찾기
    최대 처리량은 시작시간과 끝시간을 기준으로 계산한 1초가 될 것이기 때문에 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
profile
Hongik CE

0개의 댓글