새소식

반응형
코딩 테스트

[프로그래머스] 광고 삽입

  • -
728x90
반응형

문제

  • 전체 영상의 길이와 시청자들의 재생 구간이 주어질 때, 공익 광고의 최적의 삽입 구간 찾기
    • 시청자들의 누적 재생시간이 가장 큰 구간 찾아야 한다. 동일하다면 더 빠른 시각을 리턴한다.
    • 00:00:01 <= HH:MM:SS <= 99:59:59
    • 1 <= 시청자들 재생 구간 개수 <= 300,000

 

풀이

  • 전체 재생 시간을 초당 나눠서 누적 시청자 수를 센다.
  • 광고 시간 범위 내에서 누적 시청자 수의 최댓값을 찾는다. (단순 반복)
  • 시작 시간을 다시 문자열로 변경해 리턴한다.

 

# HH:MM:SS 를 초로 나타내기
def time_split(time):
    h, m, s = map(int, time.split(":"))
    return h*3600 + m*60 + s

def solution(play_time, adv_time, logs):
    play_time = time_split(play_time)   
    adv_time = time_split(adv_time)
    times = [0 for _ in range(play_time+1) ]

    for log in logs:
        start, end = map(time_split, log.split("-"))
        
        times[start] += 1
        if end == play_time :
            continue
        times[end] -= 1

    for i in range(1, len(times)):      # 초당 시청자 수
        times[i] += times[i-1]
    
    for i in range(1, len(times)) :     # 초당 누적 시청자 수
        times[i] += times[i-1]
        
    cur = times[adv_time - 1]        	# 0 ~ adv_time 시청자 수
    start_time = 0
    for t in range(adv_time, play_time):# 광고 시작 시각 찾기 (start_time)
        if cur < times[t] - times[t-adv_time] :
            cur = times[t] - times[t-adv_time]
            start_time = t - adv_time + 1
	
    # HH:MM:SS 형태로 변환
    h = str(start_time // 3600).zfill(2)
    start_time = start_time % 3600
    m = str(start_time // 60).zfill(2)
    start_time = start_time % 60
    s = str(start_time).zfill(2)

    return h + ":" + m + ":" + s

 

References

  • 프로그래머스 Lv3 광고 삽입
반응형

'코딩 테스트' 카테고리의 다른 글

[프로그래머스] 도둑질  (0) 2023.06.20
[프로그래머스] 등굣길  (0) 2023.06.20
[프로그래머스] 사칙연산  (0) 2023.06.13
[프로그래머스] 조이스틱  (0) 2023.06.13
[프로그래머스] 모두 0으로 만들기  (0) 2023.06.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.