09009

[프로그래머스 lv2] [3차] 방금그곡 본문

Algorithm/문자열
[프로그래머스 lv2] [3차] 방금그곡
09009

문제 보기

https://school.programmers.co.kr/learn/courses/30/lessons/17683

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 해결

replace()를 사용하여 해결한다

 

 

소스 코드

import math
def solution(m, musicinfos):
    answer = ''
    
    answer = []
    m = m.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")

    cnt = 0
    for music in musicinfos:
        start_time, end_time = music.split(',')[0], music.split(',')[1]
        title, score = music.split(',')[2], music.split(',')[3]
        
        minutes = int(end_time.split(':')[1]) - int(start_time.split(':')[1])
        hour = int(end_time.split(':')[0]) - int(start_time.split(':')[0])
        
        time = hour * 60 + minutes
        
        score = score.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
        
        if len(score) < time:
            score *= math.ceil(time / len(score))
        
            
        elif len(score) > time:
            score = score[:time]
       

        for i in range(len(score)):          
            if len(score) >= len(m):
                if m == score[i:i+len(m)]:
                    cnt += 1
                    answer.append((title, time, cnt))
                    break
            else:
                continue
    
    if len(answer) == 0:
        return "(None)"
    else:    
        return sorted(answer, key=lambda x:(-x[1], x[2]))[0][0]
import math
def solution(m, musicinfos):
    answer = []
    
    m = m.replace('C#', 'c').replace("D#", 'd').replace('F#', 'f').replace('G#','g').replace('A#','a')
    
    for music in musicinfos:
        start_time, end_time = music.split(',')[0], music.split(',')[1]
        title, score = music.split(',')[2], music.split(',')[3]

        score = score.replace('C#', 'c').replace("D#", 'd').replace('F#', 'f').replace('G#','g').replace('A#','a')

        minutes = int(end_time.split(":")[1]) - int(start_time.split(":")[1])
        hour = int(end_time.split(":")[0]) - int(start_time.split(":")[0])
        play_time = hour * 60 + minutes

        if len(score) < play_time:
            score = score * math.ceil(play_time / len(score))
        elif len(score) >= play_time:
            score = score[:play_time]
      
        for i in range(len(score)-len(m)+1):
            if m == score[i:i+len(m)]:
                answer.append((title, play_time))
                break
    
    if len(answer) == 0:
        return "(None)"
    else:
        return sorted(answer, key=lambda x:(-x[1], x[0]))[0][0]