LEVEL3/추석 트래픽

Q·2021년 8월 11일
0

문제 설명

문제는 이 곳 링크를 참조하길 바란다.


전체 코드

def solution(lines):
    answer = 0
    start_time = []
    end_time = []

    for t in lines:
        time = t.split(" ")
        start_time.append(get_start_time(time[1], time[2]))
        end_time.append(get_time(time[1]))

    for i in range(len(lines)):
        cnt = 0
        cur_end_time = end_time[i]

        for j in range(i, len(lines)):
            if cur_end_time > start_time[j] - 1000: # 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수 이므로 -1000을 해준다
                cnt += 1
        answer = max(answer, cnt)

    return answer

def get_time(time):
    hour = int(time[:2]) * 3600
    minute = int(time[3:5]) * 60
    second = int(time[6:8])
    millisecond = int(time[9:])
    return (hour + minute + second) * 1000 + millisecond

def get_start_time(time, duration_time):
    n_time = duration_time[:-1]
    int_duration_time = int(float(n_time) * 1000)
    return get_time(time) - int_duration_time + 1

해결 방법

어렵다.... 역시 어렵다... 카카오....

이 문제는 생각보다 이해를 하면 쉬운 문제이지만 이해를 하기까지가 정말 오래 걸렸다..

일단 코드를 먼저 보면 lines로 받은 원소에서 모든 시간을 millisecond로 바꾸어 주었다.
카카오는 문제들 특성상 문자열 형태로 원소를 주기에 get_time이라는 함수를 하나 선언하여 lines의 원소 중 시간 부분을 매개변수로 넣어준다. python get_time(time[1])

그러면

def get_time(time):
    hour = int(time[:2]) * 3600
    minute = int(time[3:5]) * 60
    second = int(time[6:8])
    millisecond = int(time[9:])
    return (hour + minute + second) * 1000 + millisecond

이렇게 시,분,초,밀리세컨드를 모두 밀리세컨드로 변환시켜준다.
이 것은 끝나는 시간이므로 end_time 리스트에 append 해주고

시작하는 시간은

def get_start_time(time, duration_time):
    n_time = duration_time[:-1]
    int_duration_time = int(float(n_time) * 1000)
    return get_time(time) - int_duration_time + 1

이렇게 시간과 처리시간을 매개변수로 넣어 get_time에서 milisecond로 반환된 값을 milisecond로 변환한 처리시간으로 빼고 +1을 해준다. 그리고 시작 시간을 start_time에 append를 해준다.

그 다음 solution 함수에서 반복문을 다시 돌며 end_time[i]이 start_time[j] - 1000보다 크다면 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수에 들어가므로 cnt +1을 해준다.

마지막으로 answer에 계속 max로 비교를 해주어 마지막 answer값을 return 한다.

profile
Data Engineer

0개의 댓글

관련 채용 정보