S E P H ' S

[Python] 방금그곡 본문

Algorithm/Programmers

[Python] 방금그곡

yoseph0310 2021. 8. 26. 18:23
 

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

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

programmers.co.kr

문제보기

풀이

musicinfos의 전처리가 필요하다.

1. 코드 중에 #이 붙은 음들은 소문자로 Replace

2. 노래 시작시간, 종료시간으로 재생시간을 구하고 시작.

 

3. 재생시간이 음보다 짧은 경우

4. 재생시간이 음보다 긴 경우

 

3, 4의 경우에 맞게 melody를 구성하고, m이 melody에 포함된다면 answer에 추가한다.

이 때, 정답의 조건에 '조건에 일치하는 음악이 여러 개일 때에는 재생된 시간이 제일 긴 음악제목을 반환하고, 그것도 같을 경우는 먼저 입력된 음악 제목을 반환'이라는 조건이 있다. 이 조건에 따라서, answer에 추가할 때 idx와 playtime, musicname을 리스트 만들어 추가.

 

5. answer의 길이가 0이 아니라면 playtime이 긴 순대로 정렬, idx 오름차순으로 정렬하고 answer 배열의 첫번째의 제목을 반환.

6. answer의 길이가 0이라면 (None) 을 반환

 

def changecode(m):
    m = m.replace('C#', 'c')
    m = m.replace('D#', 'd')
    m = m.replace('F#', 'f')
    m = m.replace('G#', 'g')
    m = m.replace('A#', 'a')
    
    return m

def solution(m, musicinfos):
    answer = []
    m = changecode(m)
    
    for idx, musicinfo in enumerate(musicinfos):
        musicinfo = musicinfo.split(",")
        # playtime, code, musicname
        st, et, musicname, code = musicinfo[0], musicinfo[1], musicinfo[2], musicinfo[3]
        
        hour = 1 * (int(et.split(":")[0]) - int(st.split(":")[0]))
        if hour == 0:
            playtime = int(et.split(":")[1]) - int(st.split(":")[1])
        else:
            playtime = 60 * hour + int(et.split(":")[1]) - int(st.split(":")[1])
        
        code = changecode(code)
        
        # 재생시간이 음보다 짧은 경우
        if len(code) >= playtime:
            melody = code[0:playtime]
        # 재생시간이 음보다 긴 경우
        else:
            q, r = divmod(playtime, len(code))
            melody = code * q + code[0:r]
        # 주어진 m이 Melody에 포함되면 후보에 저장.
        if m in melody:
            answer.append([idx, playtime, musicname])
    
    if len(answer) != 0:
        answer.sort(key=lambda x: (-x[1], x[0]))
        return answer[0][2]
        
    return "(None)"

 

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 스킬트리  (0) 2021.08.27
[Python] 방문 길이  (0) 2021.08.26
[Python] 압축  (0) 2021.08.26
[Python] 파일명 정렬  (0) 2021.08.25
[Python] 124 나라의 숫자  (0) 2021.08.25