[Programmers/프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 추석 트래픽 - Python/파이썬 [해설/풀이]

SihoonCho·2022년 9월 22일
0
post-thumbnail
[Programmers/프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차 코딩테스트]
  1. [Lv. 1] 비밀 지도
  2. [Lv. 1] 다트 게임
  3. [Lv. 2] 캐시
  4. [Lv. 3] 셔틀버스
  5. [Lv. 2] 뉴스 클러스터링
  6. [Lv. 2] 프렌즈4블록
  7. [Lv. 3] 추석 트래픽

📌 문제


📝 입력 형식


💻 출력 형식


📖 입출력 예제


📌 풀이


def convertTime(line):
    date, time, elapse = line.split(' ')    # 날짜, 응답완료시간, 처리시간
    hour, minute, second = time.split(':')  # 시, 분, 초
    second, milisecond = second.split('.')  # 초, 밀리초

    # 밀리초 단위로 통일
    hour = int(hour) * 60 * 60 * 1000
    minute = int(minute) * 60 * 1000
    second = int(second) * 1000
    milisecond = int(milisecond)

    # 제시된 예제의 시작시간 공식 = 끝시간 - 처리시간 + 1(밀리초)
    end_time = hour + minute + second + milisecond
    start_time = end_time - (float(elapse[:-1]) * 1000) + 1
    return [start_time, end_time]

# 초당 처리량 계산
def throughput(start_time, periods):
    count = 0
    start_range = start_time                # 탐색구간(1초) 시작지점
    end_range = start_time + 999            # 탐색구간(1초) 끝지점
    for start_point, end_point in periods:  # 각 데이터 처리 구간에 대해
        if not (end_range < start_point or end_point < start_range):
            # 데이터 처리 구간이 탐색구간(1초)을 벗어나지 않으면
            count += 1
    return count

def solution(lines):
    periods = []                           # 구간
    for log in lines:                      # 각 로그에 대해
        periods.append(convertTime(log))   # 구간 계산

    answer = []
    for period in periods:                              # 각 데이터 처리 구간에 대해
        answer.append(throughput(period[0], periods))   # 시작시간으로부터 1초간 처리량
        answer.append(throughput(period[1], periods))   # 끝시간으로부터 1초간 처리량

    return max(answer)  # 최대 처리량 반환
profile
꾸준히 노력하는 개발자

0개의 댓글