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

Junyoung Park·2021년 12월 22일
0

코딩테스트

목록 보기
7/631

1. 문제 설명

방금 그곡

2. 문제 분석

재생 시간을 구하고 그 시간 동안의 멜로디를 구한다. 이때 재생 시간이 더 짧거나 더 긴 경우를 모두 고려해야 한다. 이때 기억하고 있는 멜로디가 포함되어 있으면 재생 시간과 인덱스를 함께 기록한다. 음악이 여러 개일 때 재생 시간, 인덱스 순서대로 정렬해 값을 return한다.

3. 나의 풀이

import math
def get_min(time1, time2):
    hour1 = int(time1[:2])
    hour2 = int(time2[:2])
    min1 = int(time1[3:])
    min2 = int(time2[3:])
    return ((hour2-hour1) *60 + (min2 - min1))

def solution(m, musicinfos):
    
    change_code = {'C#' : 'c', 'D#' : 'd', 'F#' : 'f', 'G#' : 'g', 'A#' : 'a'}
    result = []
    idx = 1
    
    for key in change_code.keys():
        if key in m:
            m = m.replace(key, change_code[key])
    
    
    for music in musicinfos:
        ms = music.split(',')
        time = get_min(ms[0], ms[1])

    
        for key in change_code.keys():
            if key in ms[3]: 
                ms[3] = ms[3].replace(key, change_code[key])
        
        len_ms = len(ms[3])
        ms[3] *= math.ceil(time/len_ms)
        ms[3] = ms[3][:time]
        print(ms[3])
        
        if m in ms[3]:
            result.append([time, idx, ms[2]])
            idx += 1
            
    if not result: return "(None)"
    
    result.sort(key=lambda x: (-x[0], x[1]))
    return result[0][2]

일부 채점 케이스에서 계속 실패했는데, 알고보니 None을 그대로 return하는 게 아니라 문자열 (None)을 return해야 했다. 앞으로 ~하지 않을 경우 default로 return할 때에는 가장 먼저 코드를 확인해보고 return하는 습관을 기르자.

profile
JUST DO IT

0개의 댓글