[KakaoSolving] 2021 카카오 블라인드 채용 - 광고삽입 [Level3]

문제 설명은 생략하겠습니다. 링크를 클릭하세요.

문제 링크

입출력 예

play_timeadv_timelogsresult
"02:03:55""00:14:15"["01:20:15-01:45:14", "00:40:31-01:00:00", "00:25:50-00:48:29", "01:30:59-01:53:29", "01:37:44-02:02:30"]"01:30:59"
"99:59:59""25:00:00"["69:59:59-89:59:59", "01:00:00-21:00:00", "79:59:59-99:59:59", "11:00:00-31:00:00"]"01:00:00"
"50:00:00""50:00:00"["15:36:51-38:21:49", "10:14:18-15:36:51", "38:21:49-42:51:45"]"00:00:00"

유형

  • prefix sum
  • 구현

나의 풀이


어려웠엉.. 이문제

prefix sum을 이용하는 깔쌈한 구현 능력이 필요한 문제..

설계 + 구현 능력이 뒷받침 된다면, 아래처럼 정제되고 깔꼼한 코드를 뚝딱할 수 있지만 난 아녔다..

풀이를 참고하고 보니 생각보다 어려운 문제는 아니였지만 짜임새 있는 코드는 잘 설계된 아이디어에서 나온 코드가 분명하다.. 오늘도 마니 배웠다. 나도 이렇게 짜보고 싶다.

그리고 풀이는
나 요즘 공부가 ㅏㅏ 하기 시러.
그러니까 낼 포스팅 마무리 할래

코드

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 = "0" + str(time // 3600)
    m = "0" + str((time%3600)//60)
    s = "0" + str((time%3600)%60)
    h = h[-2:]; m=m[-2:]; s=s[-2:]
    return h+":"+m+":"+s
    
def solution(play_time, adv_time, logs):
    # 동영상 재생시간 길이 play_time, 공익광고의 재생시간 길이 adv_time, 시청 구간 정보 logs
    n = str_to_int(play_time)
    m = str_to_int(adv_time)
    time_board = [0]*360000
    
    # 1. 각 구간의 시작과 종료를 time_board에 표시
    for i in logs:
        start, end = i.split('-')
        start = str_to_int(start)
        end = str_to_int(end)
        time_board[start] += 1
        time_board[end] -= 1
        
    # 2. 구간별 시청자수 기록
    for i in range(1, 360000): time_board[i] += time_board[i-1]
    # 3. 모든 구간 시청자수 누적 기록 
    for i in range(1, 360000): time_board[i] += time_board[i-1]
    
    max_ = time_board[m-1]
    idx = 0
    for i in range(m, n):
        if max_ < time_board[i] - time_board[i-m]:
            max_ = time_board[i] - time_board[i-m]
            idx = i-m+1
    return int_to_str(idx)

좋은 웹페이지 즐겨찾기