Skip to content

Instantly share code, notes, and snippets.

@inspirit941
Created February 20, 2021 03:24
Show Gist options
  • Save inspirit941/1fa6c735214cbdf5dd7f2e21b6de38de to your computer and use it in GitHub Desktop.
Save inspirit941/1fa6c735214cbdf5dd7f2e21b6de38de to your computer and use it in GitHub Desktop.
from datetime import datetime
# 문자열을 sec로 변환하는 메소드
def convert_to_seconds(time):
time = map(int, time.split(":"))
result = 0
for t, sec in zip(time, [3600, 60, 1]):
result += t * sec
return result;
# sec를 문자열로 반환하는 메소드
def seconds_to_time(seconds):
s = seconds % 60
seconds //= 60
m = seconds % 60
seconds //= 60
h = seconds
return '{:02d}:{:02d}:{:02d}'.format(h, m, s)
def solution(play_time, adv_time, logs):
# 초로 변환
play_sec = convert_to_seconds(play_time)
adv_sec = convert_to_seconds(adv_time)
# 각 구간별 누적합을 계산하기 위한 배열
cum_played = [0 for _ in range(360001)]
for log in logs:
log = log.split("-")
# 시작 시간
cum_played[(convert_to_seconds(log[0]))] += 1
# 끝나는 시간
cum_played[(convert_to_seconds(log[1]))] -= 1
# 각 구간별 재생횟수 구하기
for idx in range(1, play_sec + 1):
cum_played[idx] += cum_played[idx-1]
# 각 구간별 재생횟수의 누적합 = 누적 재생시간 (초)
for idx in range(1, play_sec + 1):
cum_played[idx] += cum_played[idx-1]
# 시작지점부터 play_time까지 -> 누적합의 최댓값을 리턴하는 초를 찾는다.
max_sum_time = 0
# 00초부터 시작했을 때의 누적합 최댓값을 기본으로 잡는다.
max_sum_played = cum_played[adv_sec]
for start_time in range(1, play_sec):
end_time = start_time + adv_sec if start_time + adv_sec < play_sec else play_sec
sum_played = cum_played[end_time] - cum_played[start_time]
if max_sum_played < sum_played:
max_sum_played = sum_played
max_sum_time = start_time + 1
return seconds_to_time(max_sum_time)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment