풀이 과정
- play_time, adv_time, log를 모두 초단위로 변경
- log의 시작시간엔 +1, 종료시간엔 -1
- 누적합을 구함 => 현재 시점에서의 시청자 수
- 다시 누적합을 구함 => 현재 시점까지의 시청자 수 누적합
- 전체 구간에서 가장 누적 재생시간이 긴 시작시간을 찾으면 된다.
- (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 |