728x90
반응형
문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/17683
풀이:
def solution(m, musicinfos):
m = m.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
res = []
for i in range(len(musicinfos)):
time1, time2, name, code = musicinfos[i].split(",")
Min = int(time2[3::]) - int(time1[3::])
hour = int(time2[0:2]) - int(time1[0:2])
dif = (hour*60) + Min
code = code.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
res.append([dif, name, code])
res.sort(key=lambda x:-x[0])
for i in range(len(musicinfos)):
a, b = divmod(res[i][0],len(res[i][2]))
full = res[i][2] * a + res[i][2][:b]
if m in full:
return res[i][1]
else:
return'(None)'
굉장히 오래 걸린 코드
1.
먼저 입력값 m 의 샾붙은것들을 치환해준다
m = m.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
2.
포문을 돌면서 dif 음악재생시간을 구해주고 노래코드구성을 치환을 해주면서
res에 재생시간, 노래제목, 코드구성을 넣어주고
재생시간 긴 순으로 sort해줌
for i in range(len(musicinfos)):
time1, time2, name, code = musicinfos[i].split(",")
Min = int(time2[3::]) - int(time1[3::])
hour = int(time2[0:2]) - int(time1[0:2])
dif = (hour*60) + Min
code = code.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
res.append([dif, name, code])
res.sort(key=lambda x:-x[0])
3.
정렬된 res 가지고
for문 돌면서 몫과 나머지를 이용하여 총 악보구성을 다 만듦
그리고 if 문으로 m 이 full 에 들어있으면
해당 res[i][2] (노래제목) 을 리턴
조건 일치하는거 없으면 None리턴
for i in range(len(musicinfos)):
a, b = divmod(res[i][0],len(res[i][2]))
full = res[i][2] * a + res[i][2][:b]
if m in full:
return res[i][1]
else:
return'(None)'
반응형
댓글