본문 바로가기
개발/Algorithm 문제 풀이

[Python] 카카오 2018 - 방금 그 곡

by DenverAlmighty 2020. 8. 19.
반응형

 

나의 풀이

import re

def poundSign(m):
    m = re.sub(r'\w#', lambda x : x.group(0).lower()[0], m)
    return m

def solution(m, musicinfos):
    ans ="(None)"
    ansT = -1
    ans_dict = {}
    m = poundSign(m)
    for song in musicinfos:
        splt = re.split('[,:]', song)
        playingT = (int(splt[2]) - int(splt[0]))*60 + int(splt[3]) - int(splt[1])
        splt[5] = poundSign(splt[5])
        played = splt[5] * (playingT // len(splt[5])) + splt[5][:playingT % len(splt[5])]
        for i in range(len(played) - len(m)+1):
            if(m == played[i:i+len(m)]) :
                if ansT == -1 or ansT < playingT:
                    ans = splt[4]
                    ansT = playingT
                break
    return ans

음 처음에는 dictionary에  조건을 만족하는 노래 - 재생 시간을 담아 정렬 후 출력하였다.

근데 시간이 큰 겅우에 갱신하도록 수정하였다. 

 

dictionay 로 풀이

 

더보기
import re

def poundSign(m):
    m = re.sub(r'\w#', lambda x : x.group(0).lower()[0], m)
    return m

def solution(m, musicinfos):
    #....
        for i in range(len(played) - len(m)+1):
            if(m == played[i:i+len(m)]) :
                ans_dict[splt[4]] = playingT
                break
    
    if(len(ans_dict) == 1) : answer = [*ans_dict][0]
    elif(len(ans_dict) > 1) :
        res = sorted(ans_dict.items(), key = (lambda x: x[1]), reverse=True)
        answer = [*res][0][0]
    return answer

 

 

참고

22 ~ 24, 29번이 계속 틀렸는데 None 인경우

"(None)" 단어가 틀렸었다...

20, 27,28번은 조건들을 만족하는 곡이 여러개인 경우 가장 긴 곡을 선택하는 부분이 없으면 틀린다.

 

728x90
반응형