재생 시간을 구하고 그 시간 동안의 멜로디를 구한다. 이때 재생 시간이 더 짧거나 더 긴 경우를 모두 고려해야 한다. 이때 기억하고 있는 멜로디가 포함되어 있으면 재생 시간과 인덱스를 함께 기록한다. 음악이 여러 개일 때 재생 시간, 인덱스 순서대로 정렬해 값을 return한다.
import math
def get_min(time1, time2):
hour1 = int(time1[:2])
hour2 = int(time2[:2])
min1 = int(time1[3:])
min2 = int(time2[3:])
return ((hour2-hour1) *60 + (min2 - min1))
def solution(m, musicinfos):
change_code = {'C#' : 'c', 'D#' : 'd', 'F#' : 'f', 'G#' : 'g', 'A#' : 'a'}
result = []
idx = 1
for key in change_code.keys():
if key in m:
m = m.replace(key, change_code[key])
for music in musicinfos:
ms = music.split(',')
time = get_min(ms[0], ms[1])
for key in change_code.keys():
if key in ms[3]:
ms[3] = ms[3].replace(key, change_code[key])
len_ms = len(ms[3])
ms[3] *= math.ceil(time/len_ms)
ms[3] = ms[3][:time]
print(ms[3])
if m in ms[3]:
result.append([time, idx, ms[2]])
idx += 1
if not result: return "(None)"
result.sort(key=lambda x: (-x[0], x[1]))
return result[0][2]
일부 채점 케이스에서 계속 실패했는데, 알고보니 None을 그대로 return하는 게 아니라 문자열 (None)을 return해야 했다. 앞으로 ~하지 않을 경우 default로 return할 때에는 가장 먼저 코드를 확인해보고 return하는 습관을 기르자.