알고리즘/문제 풀이

[Python/파이썬 프로그래머스] 광고 삽입

광규니 2021. 5. 19. 00:16
반응형

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

 

코딩테스트 연습 - 광고 삽입

시간을 나타내는 HH, H1, H2의 범위는 00~99, 분을 나타내는 MM, M1, M2의 범위는 00~59, 초를 나타내는 SS, S1, S2의 범위는 00~59까지 사용됩니다. 잘못된 시각은 입력으로 주어지지 않습니다. (예: 04:60:24, 11

programmers.co.kr

 

풀이

도저히 몰라서 찾아본 답

 

가장 풀이 해석이 잘 돼있는 사이트입니다

https://dev-note-97.tistory.com/156

 

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

문제주소 :programmers.co.kr/learn/courses/30/lessons/72414 코딩테스트 연습 - 광고 삽입 시간을 나타내는 HH, H1, H2의 범위는 00~99, 분을 나타내는 MM, M1, M2의 범위는 00~59, 초를 나타내는 SS, S1, S2의..

dev-note-97.tistory.com

# 프로그래머스 광고삽입
 

def str_to_int(time):
    h,m,s=time.split(':')
    return int(h)*3600+int(m)*60+int(s)

def int_to_str(time):
    h=time//3600
    h='0'+str(h) if h<10 else str(h)
    time=time%3600
    m=time//60
    m='0'+str(m) if m<10 else str(m)
    time=time%60
    
    s='0'+str(time) if time<10 else str(time)
    
    return h+':'+m+':'+s

def solution(play_time, adv_time, logs):
    # 길이를 시간으로
    play_time=str_to_int(play_time)
    adv_time=str_to_int(adv_time)

    # 0부터 play_time +1 까지 0으로 초기화한 뒤
    all_time=[0 for i in range(play_time+1)]
    #log 들을 따서 start, end에 1,-1 표시
    for i in logs:
        start,end=i.split('-')
        # all_time에 시작점과 끝점 표시
        start=str_to_int(start)
        end=str_to_int(end)
        all_time[start]+=1
        all_time[end]-=1
    # start, end 에 사이(0)를 빈 곳을 메꾸는 용도
    for i in range(1,len(all_time)):
        all_time[i]=all_time[i]+all_time[i-1]
    # log들의 중복값을 더하는 용도
    for i in range(1,len(all_time)):
        all_time[i]=all_time[i]+all_time[i-1]

    most_view=0
    max_time=0

    for i in range(adv_time-1,play_time):

        if i >=adv_time:
            # i부터 i-adv_time까지 most_view가 큰게 있으면 값 바꿔줌
            if most_view<all_time[i]-all_time[i-adv_time]:
                most_view=all_time[i]-all_time[i-adv_time]
                max_time=i-adv_time+1
        # adv_time-1 부터 시작해서 max time을 adv_time 길이까지 설정
        else:
            if most_view<all_time[i]:
                most_view=all_time[i]
                max_time=i-adv_time+1

    return int_to_str(max_time)

몰랐던 거...

일단 play time을 기간으로 바꿔서 리스트로 정의해야되는거....

그리고 start,end를 1,-1 표시해줘서 all_time 인덱스에서 표시가능하게 만든거

and most_view, max_time 값 비교해주는거

 

구현이 어려운 문제인거 같다

반응형