반응형
https://programmers.co.kr/learn/courses/30/lessons/72414
풀이
도저히 몰라서 찾아본 답
가장 풀이 해석이 잘 돼있는 사이트입니다
https://dev-note-97.tistory.com/156
# 프로그래머스 광고삽입
def str_to_int(time):
h,m,s=time.split(':')
return int(h)*3600+int(m)*60+int(s)
def int_to_str(time):
h=time//3600
h='0'+str(h) if h<10 else str(h)
time=time%3600
m=time//60
m='0'+str(m) if m<10 else str(m)
time=time%60
s='0'+str(time) if time<10 else str(time)
return h+':'+m+':'+s
def solution(play_time, adv_time, logs):
# 길이를 시간으로
play_time=str_to_int(play_time)
adv_time=str_to_int(adv_time)
# 0부터 play_time +1 까지 0으로 초기화한 뒤
all_time=[0 for i in range(play_time+1)]
#log 들을 따서 start, end에 1,-1 표시
for i in logs:
start,end=i.split('-')
# all_time에 시작점과 끝점 표시
start=str_to_int(start)
end=str_to_int(end)
all_time[start]+=1
all_time[end]-=1
# start, end 에 사이(0)를 빈 곳을 메꾸는 용도
for i in range(1,len(all_time)):
all_time[i]=all_time[i]+all_time[i-1]
# log들의 중복값을 더하는 용도
for i in range(1,len(all_time)):
all_time[i]=all_time[i]+all_time[i-1]
most_view=0
max_time=0
for i in range(adv_time-1,play_time):
if i >=adv_time:
# i부터 i-adv_time까지 most_view가 큰게 있으면 값 바꿔줌
if most_view<all_time[i]-all_time[i-adv_time]:
most_view=all_time[i]-all_time[i-adv_time]
max_time=i-adv_time+1
# adv_time-1 부터 시작해서 max time을 adv_time 길이까지 설정
else:
if most_view<all_time[i]:
most_view=all_time[i]
max_time=i-adv_time+1
return int_to_str(max_time)
몰랐던 거...
일단 play time을 기간으로 바꿔서 리스트로 정의해야되는거....
그리고 start,end를 1,-1 표시해줘서 all_time 인덱스에서 표시가능하게 만든거
and most_view, max_time 값 비교해주는거
구현이 어려운 문제인거 같다
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Python/파이썬 백준 1339] 단어 수학 (0) | 2021.06.02 |
---|---|
[Python/파이썬 1107 백준] 리모컨 (0) | 2021.05.20 |
[Python/파이썬 프로그래머스] 메뉴 리뉴얼 (0) | 2021.05.10 |
[Python/파이썬 프로그래머스] 보석 쇼핑 (0) | 2021.05.06 |
[Python/파이썬 프로그래머스] 키패드 누르기 (0) | 2021.05.04 |