Created
February 20, 2021 03:24
-
-
Save inspirit941/1fa6c735214cbdf5dd7f2e21b6de38de to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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