보물창고 블로그

2018 KAKAO BLINDRECRUITMENT 1차 추석 트래픽 본문

알고리즘 풀이/프로그래머스

2018 KAKAO BLINDRECRUITMENT 1차 추석 트래픽

홋 메 2020. 3. 26. 15:24
728x90

문제 링크:https://programmers.co.kr/learn/courses/30/lessons/17676

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제의 핵심은 시간의 대소 비교를 어떻게 할 것인가이다. 나는 파이썬의 datetime 모듈을 사용하여 이를 해결하였다. 먼저 split() 함수를 사용하여 lines의 line들을 공백을 기준으로 나누고, 실행된 시간을 duration에 저장하고, strptime함수를 사용하여 시작시간과 끝나는 시간을 계산하고, 개수가 변하는 기준점은 각 요청이 시작되는 지점과 끝나는 지점이므로, 요청이 시작되는 지점에서의 0.999초까지의 시간 안에 각 요청이 처리된 기간 안에 포함돼있는지 여부에 따라 count를 늘려서 모든 요청과 비교하고, count값이 현재 answer값보다 클 때 answer값을 경신하도록 하였다.

import datetime


def solution(lines):
    tt = []
    check = []
    answer = 0
    for i in lines:
        i = i.split()
        duration = float(i[2][:-1])
        end = datetime.datetime.strptime(" ".join(i[:2]), "%Y-%m-%d %H:%M:%S.%f")
        start = end - datetime.timedelta(seconds=(duration - 0.001))
        tt.append([start, end])
        check.append(start)
        check.append(end)
    for c in check:
        count = 0
        for w in tt:
            if c + datetime.timedelta(seconds=0.999) < w[0]:
                continue
            elif c > w[1]:
                continue
            else:
                count += 1
        if count > answer:
            answer = count
    return answer
Comments