본문 바로가기
알고리즘/프로그래머스

[Python] 프로그래머스 방금그곡

by 컴공맨 2021. 4. 18.
 

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

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

programmers.co.kr


풀이

우선, musicinfos를 보면서 시작시간, 끝 시간, 음악 정보를 split(", ")을 통해서 나누고 미리 만든 change_rhythm을 사용해서 #이 붙은 코드들을 전부 한 글자의 코드로 바꾸어 주었습니다.

그다음, 음악 정보에서 한 코드는 1분이므로 만약, 라디오에서의 재생시간보다 음악 정보의 재생시간이 길다면 라디오의 재생시간에 맞게 음악 정보를 줄여주었습니다.

반대로 음악정보의 재생시간보다 라디오의 재생시간이 길다면 음악 정보의 코드를 라디오의 재생시간에 맞게 늘려주었고 같다면 그대로 유지시켰습니다.

다음으로,

  • 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.

라는 조건이 있으므로 이를 처리하게하여 해결했습니다.


코드

def solution(m, musicinfos):
    answer = '(None)'

    max_play_time = 0

    change_rhythm = {"C#": "c", "D#": "d", "F#": "f", "G#": "g", "A#": "a"}

    for rhythm in change_rhythm:
        m = m.replace(rhythm, change_rhythm[rhythm])

    for musicinfo in musicinfos:
        info = musicinfo.split(",")

        st_time = int(info[0][:2]) * 60 + int(info[0][3:])
        en_time = int(info[1][:2]) * 60 + int(info[1][3:])

        play_time = en_time - st_time

        music_m = info[3]

        for rhythm in change_rhythm:
            music_m = music_m.replace(rhythm, change_rhythm[rhythm])

        full_m = ""
        if len(music_m) > play_time:
            full_m = music_m[:play_time]
        else:
            full_m = music_m

        for i in range(len(music_m), play_time):
            full_m += music_m[i % len(music_m)]

        if m in full_m:
            if answer != "(None)":
                if max_play_time < play_time:
                    max_play_time = play_time
                    answer = info[2]
            else:
                max_play_time = play_time
                answer = info[2]

    return answer

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com