Programmers#[1차] 추석 트래픽

LSM ·2021년 9월 12일
0
post-custom-banner


LEVEL :

Level3


문제 요약 :

2018년 카카오톡 코딩테스트 제출 문제이다.

각 주어진 시간 로그 값들을 분석하여 1초라는 구간에 포함 될 수 있는 가장 많은 트래픽의 수를 구하는 문제였다.


해결 방안 :

문자열로 들어온 시간을 miliseconds 단위로 전부 다 바꿔주는게 관건이었던 것 같다. 그 후에는 1초 구간을 어디에 설정 할 것인가가 고민해야 할 점이었는데 문제에서 제시한 그림을 보고 구간의 시작과 끝점에서 만 체크해주면 될것이라고 생각했고 그 후로는 구간에 포함될 조건문을 써서 간단히 체킹해주었다.


시간 복잡도 :
N = lines의 길이
O(N**2)


Solution

def solution(lines):
    log = [list(line.strip().split()) for line in lines]
    durations = [list(t[1].strip().split(":")) for t in log]
    one_sec = 1000 
    one_minu = 60000
    one_hour = 3600000
    for i in range(len(durations)) :
        hour = int(durations[i][0]) * one_hour
        minu = int(durations[i][1]) * one_minu
        sec = int(float(durations[i][2]) * one_sec)
        t = int(float(log[i][2][:-1]) * one_sec)
        finishTime = hour+minu+sec
        startTime = finishTime - t + 1
        durations[i] = [startTime,finishTime]
    max_num = -1
    for standard in durations :
        start = standard[0]
        finish = standard[1] 
        fromStart = 0  #구간의 시작 부터 1초
        fromFinish = 0 #구간의 끝 부터 1초
        for duration in durations :
            if (start <= duration[0] < start + one_sec) or (start <= duration[1] < start + one_sec) or (duration[0]< start and duration[1] > start + one_sec):
                fromStart += 1
            if finish <= duration[0] < finish + one_sec or finish <= duration[1] < finish + one_sec or (duration[0]< finish and duration[1] > finish + one_sec) :
                fromFinish += 1
        max_num = max(max_num,fromStart,fromFinish)
    return max_num

출처

프로그래머스 : https://programmers.co.kr/learn/courses/30/lessons/17676

profile
개발 및 취준 일지
post-custom-banner

0개의 댓글