코딩
[프로그래머스] 광고삽입 .py 본문
programmers.co.kr/learn/courses/30/lessons/72414
주의 #1
play_time은 최소 1초이다.
주의 #2
시간의 범위는 00~99 이다. 통상적인 24:60:60 포맷과는 다르므로
이럴 경우, import time 이나 datetime을 해주면 오류가 난다.
시간을 초로 바꾸어 풀어주는것이 좋다.
주의 #3
최대 범위는 99:59:59 이를 초로 바꾸어도 1e9값보다 훨씬 작으므로
이럴 경우 모든 초를 배열로 바꾸어 DP를 해주는것이 좋다.
1. time을 seconds로 바꿔주는 메소드
def to_seconds(time):
return sum([int(x)*y for x, y in zip(time.split(':'), [3600, 60, 1])])
2. seconds를 time으로 바꿔주는 메소드
def to_time(seconds):
h, m = divmod(seconds, 3600)
m, s = divmod(m, 60)
return '{:02d}:{:02d}:{:02d}'.format(h, m, s)
3. 누적된 시간 리스트를 구하는 메소드
def get_accumulated_time(play_list):
for i in range(1, len(play_list)):
play_list[i] += play_list[i - 1]
for i in range(1, len(play_list)):
play_list[i] += play_list[i - 1]
return play_list
4. solution
def solution(play_time, adv_time, logs):
if play_time == adv_time:
return "00:00:00"
play_list = [0] * (to_seconds(play_time) + 1)
adv_time = to_seconds(adv_time)
play_time = to_seconds(play_time)
for log in logs:
s, e = log.split("-")
play_list[to_seconds(s)] += 1
play_list[to_seconds(e)] -= 1
play_list = get_accumulated_time(play_list) # 3번
max_viewer = 0
answer = 0
for i in range(adv_time, play_time+1):
if max_viewer < play_list[i] - play_list[i - adv_time] :
max_viewer = play_list[i] - play_list[i - adv_time]
answer = i - adv_time + 1
if max_viewer <= play_list[adv_time - 1]: # ~ adv_time-1 까지의 구간이 최대면
answer = 0 # answer은 0초
return to_time(answer)
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 문자열압축 .py (0) | 2021.02.23 |
---|---|
[프로그래머스] 메뉴리뉴얼 .py (0) | 2021.02.21 |
[프로그래머스] 합승택시요금 .py (0) | 2021.02.18 |
[프로그래머스] 큰 수 만들기 .py (0) | 2021.02.17 |
[HackerRank] ArrayManipulation #Python (0) | 2021.02.16 |
Comments