◈ 오류 정정 및 피드백 환영
코딩테스트 연습 - [3차] 방금그곡
방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,
programmers.co.kr
🔎문제 분석
편의상 재생시간은 분 단위로 측정하고, #이 붙은 계이름을 구분해주기 위해 소문자로 변경한다.
def str_to_min(st):
h, m = st.split(":")
return int(h)*60 + int(m)
def trans(st):
for i in ["A","C","D","F","G"]:
st = st.replace(i+"#",i.lower())
return st
for i in musicinfos:
s, e, name, melody = i.split(',')
time = str_to_min(e)-str_to_min(s)
m = trans(m)
melody = trans(melody)
재생시간을 측정하기 위해 재생된 멜로디를 생성해야 하는데 재생시간과 음악시간의 차이에 따라 3가지 경우로 나뉜다.
- 재생시간=음악시간
- 재생시간<음악시간
- 재생시간>음악시간
길이가 같은 1. 과 달리 2. 의 경우 재생시간만큼만 멜로디를 재생해야 하며, 3. 의 경우 재생시간을 음악시간으로 나누어 몫만큼 반복하고 나머지만큼 추가로 재생해야 한다.
if time==n:
play = melody
elif time<n:
play = melody[:time]
else:
sh, re = divmod(time, n)
play = melody*sh+melody[:re]
마지막으로 일치하는 멜로디의 길이를 비교하며 재생시간이 가장 긴 음악 제목을 업데이트하면 된다
if m in play:
if len(play) > mx_play:
mx_play = len(play)
answer = name
def str_to_min(st):
h, m = st.split(":")
return int(h)*60 + int(m)
def trans(st):
for i in ["A","C","D","F","G"]:
st = st.replace(i+"#",i.lower())
return st
def solution(m, musicinfos):
answer = '(None)'
mx_play = 0
for i in musicinfos:
s, e, name, melody = i.split(',')
time = str_to_min(e)-str_to_min(s)
m = trans(m)
melody = trans(melody)
n = len(melody)
if time==n:
play = melody
elif time<n:
play = melody[:time]
else:
sh, re = divmod(time, n)
play = melody*sh+melody[:re]
if m in play:
if len(play) > mx_play:
mx_play = len(play)
answer = name
return answer
'Algorithm > Python' 카테고리의 다른 글
[Python] 프로그래머스 - [1차] 셔틀버스 (0) | 2022.03.14 |
---|---|
[Python] 프로그래머스 - [3차] 압축 (0) | 2022.03.13 |
[Python] 프로그래머스 - [1차] 프렌즈4블록 (0) | 2022.03.11 |
[Python] 프로그래머스 - 키패드 누르기 (0) | 2022.03.10 |
[Python] 프로그래머스 - 크레인 인형뽑기 게임 (0) | 2022.03.09 |
댓글