ALGORITHM/Kakao

[Python] 광고 삽입

김쿸후 2022. 3. 31. 20:15

1. 문제

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

2. 풀이

  • 예전에 풀었던 문제에서 나왔던 누적합 개념을 써먹어서 너무 기쁨!!!!취준 코테에도 나오면 좋겠다^^*
  • 누적합을 써도 시간 초과가 나와서
    • adv(광고 길이) 단위로 계속 합치는 것이기 때문에 dp로 더해주었더니 풀림
    • 누적합으로 시간복잡도가 n^2 -> n*4 로 바뀜
  • 중간에 몇개가 틀리는데 이유를 모르겠어서 검색해봤더니 끝나는 시간 미만으로 생각해야 한다해서 +1 붙였던 것들을 뺐더니 맞았음

3. 코드

def stringtotime(str_time):
    h,m,s = str_time.split(":")
    h,m,s = int(h),int(m),int(s)
    return h*3600 + m*60 + s
    
def timetostring(int_answer):
    answer = ''
    if (int_answer // 3600) >= 10:
        answer += str(int_answer // 3600)
    else:
        answer += "0" + str(int_answer // 3600)
    answer += ":"
    if ((int_answer % 3600 )//60) >= 10:
        answer += str((int_answer % 3600 )//60)
    else:
        answer += "0" + str((int_answer % 3600 )//60)
    answer += ":"
    if ((int_answer % 3600)%60) >= 10:
        answer += str((int_answer % 3600)%60)
    else:
        answer += "0" + str((int_answer % 3600)%60)
    return answer
    
def solution(play_time, adv_time, logs):
    answer = ''
    time_dict = []
    end = stringtotime(play_time)
    adv = stringtotime(adv_time)

    time_dict = [0]*(end + 2)
    
    for i in logs:
        stt, fin = i.split("-")
        stt = stringtotime(stt)
        fin = stringtotime(fin)
        time_dict[stt] += 1
        time_dict[fin] -= 1

    for i in range(1,end+1):
        time_dict[i] = time_dict[i] + time_dict[i-1]
        
    # 누적합
    int_answer = 0
    list_sum = []
    elem = 0
    
    # 0-adv시간까지 본사람 숫자 세기
    for i in range(adv):
        elem += time_dict[i]
    list_sum.append(elem)
    max_time = elem
    
    # 
    for i in range(1,end - adv+1):
        elem = list_sum[i-1] - time_dict[i-1]+ time_dict[adv+i-1]
        list_sum.append(elem) 
        if elem > max_time :
            max_time = elem
            int_answer = i
            
    answer = timetostring(int_answer)
    # print(answer)
    return answer

'ALGORITHM > Kakao' 카테고리의 다른 글

[Python] 합승 택시 요금  (0) 2022.03.31
[Python] 순위 검색  (0) 2022.03.31
[Python] 다단계 칫솔 판매  (0) 2022.03.24
[Python] 사라지는 발판  (0) 2022.03.24
[Python] 행렬 테두리 회전하기  (0) 2022.03.22