프로그래머스. 방금그곡 파이썬 풀이

minan·2021년 6월 29일
0

프로그래머스

목록 보기
77/92

프로그래머스. Level 2. 방금그곡 파이썬 풀이

문제링크 https://programmers.co.kr/learn/courses/30/lessons/17683#

# '#'이 붙은 음을 소문자로 변환하는 함수
def change(music):
    if 'A#' in music:
        music = music.replace('A#', 'a')
    if 'F#' in music:
        music = music.replace('F#', 'f')
    if 'C#' in music:
        music = music.replace('C#', 'c')
    if 'G#' in music:
        music = music.replace('G#', 'g')
    if 'D#' in music:
        music = music.replace('D#', 'd')
    return music

def solution(m, musicinfos):
    answer = []
    index = 0  # 먼저 입력된 음악을 판단하기 위해 index 추가
    for info in musicinfos:
        index += 1
        music = info.split(',')
        start = music[0].split(':') # 시작 시간
        end = music[1].split(':')  # 종료 시간
        # 재생시간 계산
        time = (int(end[0])*60 + int(end[1])) - (int(start[0])*60 + int(start[1]))
        
        # 악보에 #이 붙은 음을 소문자로 변환
        changed = change(music[3])
        
        # 음악 길이
        a = len(changed)
        
        # 재생시간에 재생된 음
        b = changed * (time // a) + changed[:time%a]
        
        # 기억한 멜로디도 #을 제거
        m = change(m)
        
        # 기억한 멜로디가 재생된 음에 있다면 결과배열에 [시간, index, 제목]을 추가
        if m in b:
            answer.append([time, index, music[2]])
    
    # 결과배열이 비어있다면 "None" 리턴
    if not answer:
        return "(None)"
    # 결과배열의 크기가 1이라면 제목 리턴
    elif len(answer) == 1:
        return answer[0][2]
    # 결과 배열의 크기가 2보다 크다면 재생된 시간이 긴 음악, 먼저 입력된 음악순으로 정렬
    else:
        answer = sorted(answer, key=lambda x: (-x[0], x[1]))
        return answer[0][2] # 첫번째 제목을 리턴
profile
https://github.com/minhaaan

0개의 댓글