코딩놀이: python C C++

[python, 프로그래머스] lv3: 추석 트래픽 (datetime)

jiheek 2022. 6. 15. 16:26

https://programmers.co.kr/learn/courses/30/lessons/17676

 

코딩테스트 연습 - [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

import datetime

def make_timeline(lines):
    start=[]
    end=[]
    for i in lines:
        temp = i.split()
        duration = float(temp[2][:-1])
        #make "start, end" datetime objects
        end_time = datetime.datetime.strptime(temp[1], '%H:%M:%S.%f')
        start_time = end_time - datetime.timedelta(seconds=duration) + datetime.timedelta(milliseconds=1)
        start.append(start_time)
        end.append(end_time)
    return start,end

def solution(lines):
    start, end = make_timeline(lines)
    step = min(start)
    max_cnt = 0

    for step_f in (start+end):
        count=0

        step = step_f - datetime.timedelta(seconds=0.999)

        for i in range(len(start)):
            if not ((start[i] > step_f) or (end[i] < step)):
                count += 1
        if count>max_cnt:
            max_cnt=count
        
    answer = max_cnt
    return answer

 

풀이 방법: 어떻게 최소 구간의 계산만으로 최대값을 찾느냐가 관건이었다.

각 프로세스의 시작, 끝나는 시간에서 1초 전까지의 구간들에 대해서 최대 처리량을 계산했다.

 

주의할 점: 1초 간격이라고 해서 딱 1초 빼면 안되고, 0.999sec만 빼줘야 한다. 간격 계산(더하기 빼기 수학 ㅠㅠ) 잘하기!

 

 


Datetime 

datetime.datetime.strptime으로 문자열 시간을 datetime.time 자료형으로 변경할 수 있다.

그렇게 변경하면, 크기 비교timedelta를 사용한 시간 연산을 수행할 수 있다.

#String time to datetime.time object
string = 01:00:04.001
dt = datetime.datetime.strptime(string, '%H:%M:%S.%f')

#datetime.time 연산
dt - datetime.timedelta(seconds=0.999)

크기 비교 및 max 찾기