목차

광고 삽입

ps
링크programmers.co.kr/…
출처프로그래머스
문제 번호72414
문제명광고 삽입
레벨Level 3
분류

구간 합

시간복잡도O(n+m)
인풋사이즈n<=300,000, m<=360,000
사용한 언어Python
해결날짜2021/01/28
출처

ps:problems:programmers:2021_kakao_blind_recruitment

풀이

코드

"""Solution code for "Programmers 72414. 광고 삽입".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/72414
- Solution link: http://www.teferi.net/ps/problems/programmers/72414
"""


def time_to_secs(time):
    h, m, s = [int(x) for x in time.split(':')]
    return (h * 60 + m) * 60 + s


def solution(play_time, adv_time, logs):
    play_time_sec = time_to_secs(play_time) + 1
    range_diff = [0] * play_time_sec
    prefix_sum = [0] * play_time_sec
    for log in logs:
        beg, end = [time_to_secs(x) for x in log.split('-')]
        range_diff[beg] += 1
        range_diff[end] -= 1

    range_count = 0
    for i in range(1, play_time_sec):
        prefix_sum[i] += prefix_sum[i - 1] + range_count
        range_count += range_diff[i]

    adv_time_sec = time_to_secs(adv_time)
    max_view = max((prefix_sum[t + adv_time_sec] - prefix_sum[t], -t)
                   for t in range(play_time_sec - adv_time_sec))
    best_time = -max_view[1]
    hh, mm, ss = best_time // 3600, best_time % 3600 // 60, best_time % 60
    return f'{hh:02d}:{mm:02d}:{ss:02d}'