풀이 과정


  1. play_time, adv_time, log를 모두 초단위로 변경
  2. log의 시작시간엔 +1, 종료시간엔 -1
  3. 누적합을 구함 => 현재 시점에서의 시청자 수
  4. 다시 누적합을 구함 => 현재 시점까지의 시청자 수 누적합
  5. 전체 구간에서 가장 누적 재생시간이 긴 시작시간을 찾으면 된다.
    • (a, b) 구간의 누적합 = 누적합[b] - 누적합[a]

소스 코드


def convert(time):
    return 3600 * int(time[:2]) + 60 * int(time[3:5]) + int(time[6:8])

def r_convert(s):
    hour = str(s // 3600).zfill(2)
    s = s % 3600
    minite = str(s // 60).zfill(2)
    s = s % 60
    second = str(s).zfill(2)
    return hour + ":" + minite + ":" + second


def solution(play_time, adv_time, logs):
    answer = ''
    total = convert(play_time)
    advertise = convert(adv_time)
    consumers = [0] * (total+1)
    n = 0

    for log in logs:
        temp = log.split('-')
        consumers[convert(temp[0])] += 1
        consumers[convert(temp[1])] -= 1

    for i in range(1, total+1): # 현재 시점에서의 시청자 수
        consumers[i] += consumers[i-1]

    for i in range(1, total+1):
        consumers[i] += consumers[i-1]

    people = consumers[advertise-1]
    time = 0

    for start in range(0, total-advertise):
        if people < consumers[start+advertise] - consumers[start]:
            people = consumers[start+advertise] - consumers[start]
            time = start + 1

    answer = r_convert(time)

    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글

[ Lv 3 ] [ 1차 ] 셔틀버스  (0) 2021.07.20
[ Lv 3 ] [ 1차 ] 추석 트래픽  (0) 2021.07.19
[ Lv 3 ] 숫자 게임  (0) 2021.07.18
[ Lv 3 ] 하노이의 탑  (0) 2021.07.18
[ Lv 3 ] 섬 연결하기  (0) 2021.07.17

+ Recent posts