상상쓰

[프로그래머스] [3차] 방금그곡 본문

Coding Test

[프로그래머스] [3차] 방금그곡

상상쓰 2021. 9. 1. 17:52

https://programmers.co.kr/learn/courses/30/lessons/17683

 

코딩테스트 연습 - [3차] 방금그곡

방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,

programmers.co.kr

 

'#' 이 붙은 음은 여기서 한 문자로 취급되어야 하므로 한 문자로 대체한다. ('C#' -> 'c')

divmod 를 사용하여 구한 몫과 나머지로 곡의 정보를 반복 또는 slicing 하여 재생된 전체 멜로디를 구한 뒤 그 정보를 담은 dictionary 를 재생 길이로 내림차순, 먼저 나온 음악 순서로 정렬한다.

 

그럼, 정렬된 dictionary 를 반복하여 네오가 기억한 멜로디가 들어있는 음악이라면 반복문을 종료하고 해당 음악의 제목을 반환하면 된다.

 

def solution(m, musicinfos):
    answer = '(None)'
    dic = {}
    m = m.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a')
    index = 0
    
    for i in musicinfos:
        index += 1
        s, e, sj, info = i.split(',')
        info = info.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a')
        sm, ss = s.split(':')
        em, es = e.split(':')
        l = (int(em) - int(sm)) * 60 + int(es) - int(ss)
        d, r = divmod(l, len(info))
        dic[sj] = [info * d + info[:r], index] 
    
    music = sorted(dic.items(), key = lambda x : (-len(x[1][0]), x[1][1]))
    
    for sj, info in music:
        if m in info[0]:
            answer = sj
            break
            
    return answer

print(solution('ABCDEFG', ['12:00,12:14,HELLO,CDEFGAB', '13:00,13:05,WORLD,ABCDEF'])) # HELLO
Comments