1 minute read

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

문제는 사이트 참고

생각

image

풀이

def solution(lines):
    #초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미
    # line => 응답완료시간 S와 처리시간 T가 공백으로 구분
    list = []
    totalList = []
    for line in lines:
        #2016-09-15 03:10:33.020 0.011s
        splitLineList= line.split(" ")
        hh, mm, ss = splitLineList[1].split(":") #hh:mm:ss.sss
        T = splitLineList[2].replace("s","")    #초단위 s 제거
        #시작 초
        # start = int(hh) * 3600 + int(mm) * 60 + float(ss) - float(T) + 0.001 #한시간은 60분 , 1분은 60초
        # during = float(T) - 0.001
        start =  (int(hh) * 3600 + int(mm) * 60 + float(ss) - float(T)) * 1000 +1
        end  = (int(hh) * 3600 + int(mm) * 60 + float(ss)) * 1000

        list.append((int(start), int(end)))
        totalList.append(int(start))
        totalList.append(int(end))
        # print(start,T)

    # 탐색해야 할 시작 초와 끝 초를 찾는다.
    startSecond = list[0][0]
    endSecond = list[len(list)-1][1]
    answer = []
    # for time in range(startSecond , endSecond ):    #소수점 제거
    for time in totalList:
        #list를 돌면서 해당되는 time 수 세기
        cnt =0
        for index in range(0, len(list)):
            start = list[index][0]
            end = list[index][1]
            if end < time:
                continue
            if start >= time + 1000:
                continue
            # break , 시간복잡도 통과
            if start > time + 1000:
                break
            cnt +=1
        answer.append((cnt,time))

    return max(answer)[0]

if __name__ == '__main__':
    lines = ["2016-09-15 01:00:04.002 2.0s", "2016-09-15 01:00:07.000 2s"]

    print(solution(lines))

참고 질문

https://programmers.co.kr/questions/24046

코드 내에서 위 조건을 만족하지 않으면 즉시 break를 걸고 i를 변경했는데 생각해보니 startTime을 비교해야하므로 i + 1 ~ N까지 모든 대상으로 검사를 진행해야 했네요.
혹시 조건 만족 안할 시 break를 거신 분이 있다면,, 이 부분도 확인하면 될 것 같습니다.

위와 같은 말을 보고 수정하니 바로 통과

Categories:

Updated: