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