코딩테스트/programmers (python)

Programmers / 2단계 / 방금그곡 / python / 2018 KAKAO BLIND RECRUITMENT

seulll 2024. 5. 22. 15:59

 

 

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

 

코드

def solution(m, musicinfos):
    m = m.replace('C#','c').replace('D#','d').replace('F#','f').replace('G#','g').replace('A#','a')
    answer = []
    for music in musicinfos:
        s = int(music.split(',')[0].split(':')[0]) * 60 + int(music.split(',')[0].split(':')[1])
        e = int(music.split(',')[1].split(':')[0]) * 60 + int(music.split(',')[1].split(':')[1])
        
        toLower = music.split(',')[3].replace('C#','c').replace('D#','d').replace('F#','f').replace('G#','g').replace('A#','a')
        
        song = toLower * ((e-s) // len(toLower) + 1)
        
        if m in song:
            answer.append((music.split(',')[2], e-s))
     
    if answer:
        answer.sort(reverse = True, key = lambda x: x[1])
        return answer[0][0]
    
    return '(None)'

 

 

 

테스트 케이스 30번만 실패하여 다른 코드를 참고하였다.

def solution(m, musicinfos):
    answer = ''
    
    result = list()
    for i in musicinfos:
        info = i.split(',')
        
        time = (int(info[1][:2]) * 60 + int(info[1][3:])) - (int(info[0][:2]) * 60 + int(info[0][3:]))
        
        music = list(info[-1])
        i = 1
        while (i < len(music)) and ('#' in music):
            if (music[i] == '#'):
                music[i - 1] = music[i - 1] + music[i]
                del music[i]
            else:
                i += 1

        length = len(music)
        play = music * (time // length) + music[ : time % length]
        
        m = list(m)
        i = 1
        while (i < len(m)) and ('#' in m):
            if (m[i] == '#'):
                m[i - 1] = m[i - 1] + m[i]
                del m[i]
            else:
                i += 1

        for i in range(len(play) - len(m) + 1):
            if (play[i : i + len(m)] == m):
                result.append([info[2], time])
                break
        
    if (len(result) > 0):
        result.sort(key = lambda x : x[1], reverse = True)
        answer = result[0][0]
    else:
        answer = '(None)'
    
    return answer

 

참조

https://yonghee.io/peurogeuraemeoseu-17683-banggeumgeugog/

 

프로그래머스 17683: 방금그곡 (카카오 2018 블라인드 공채 3차) Python 문제풀이

프로그래머스 17683: 방금그곡 (카카오 2018 블라인드 공채 3차) Python 문제풀이

yonghee.io