본문 바로가기
알고리즘/프로그래머스

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

by 컴공맨 2021. 5. 2.
 

코딩테스트 연습 - [1차] 추석 트래픽

입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1

programmers.co.kr


풀이

우선, 문제에서 시간이 들어있는 문자열을 파싱 하여 전부 밀리 초로 바꾸어 시작시간과 끝나는 시간을 각각 리스트에 저장했습니다.

그다음으로 1초(1000밀리 초) 단위로 트래픽을 검사하고 끝 시간은 포함해야 하기 때문에 각 로그의 시작시간에서 999밀리 초를 빼주어 검사하고자 하는 범위를 구했습니다.

다음으로 각 로그별 시간이 범위에 포함된다면 카운트 값을 +1 하여 1초 단위의 트래픽 개수를 구하였고 그중 최대 개수의 트래픽을 구해야 하므로 max 함수를 이용하여 각 범위별 최댓값을 갱신하게 하여 해결했습니다.


코드

def solution(lines):
    answer = 0

    start_times = list()
    end_times = list()

    for line in lines:
        logs = line.split(" ")
        time = logs[1].split(":")

        process_time = float(logs[2][:-1]) * 1000 - 1

        end = (int(time[0]) * 60 * 60 * 1000) + (int(time[1]) * 60 * 1000) + (float(time[2]) * 1000)
        end_times.append(end)

        start = end - process_time
        start_times.append(start)

    for i in range(len(start_times)):
        cnt = 0
        start_range = start_times[i] - 999

        for j in range(len(start_times)):
            if start_range <= start_times[j] <= start_times[i]:
                cnt += 1
            elif start_times[j] <= start_range <= end_times[j]:
                cnt += 1

        answer = max(answer, cnt)

    return answer

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com