본문 바로가기
프로그래머스/2단계

(Python/LV2) 방금 그곡

by windy7271 2022. 10. 12.
728x90
반응형

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/17683 

 

프로그래머스

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

programmers.co.kr

풀이:

 

def solution(m, musicinfos):
    m = m.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
    res = []
    for i in range(len(musicinfos)):
        time1, time2, name, code = musicinfos[i].split(",")
        Min = int(time2[3::]) - int(time1[3::])
        hour = int(time2[0:2]) - int(time1[0:2])
        dif = (hour*60) + Min
        code = code.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
        res.append([dif, name, code])
    res.sort(key=lambda x:-x[0])
    for i in range(len(musicinfos)):
        a, b = divmod(res[i][0],len(res[i][2]))
        full = res[i][2] * a + res[i][2][:b]

        if m in full:
            return res[i][1]
    else:
        return'(None)'

 

 

굉장히 오래 걸린 코드

 

 

1.

 

먼저 입력값 m 의 샾붙은것들을 치환해준다
 m = m.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")

 

2.

포문을 돌면서 dif 음악재생시간을 구해주고 노래코드구성을 치환을 해주면서 
res에 재생시간, 노래제목, 코드구성을 넣어주고
재생시간 긴 순으로 sort해줌

for i in range(len(musicinfos)):
        time1, time2, name, code = musicinfos[i].split(",")
        Min = int(time2[3::]) - int(time1[3::])
        hour = int(time2[0:2]) - int(time1[0:2])
        dif = (hour*60) + Min
        code = code.replace("C#", "c").replace("D#", "d").replace("F#", "f").replace("G#", "g").replace("A#", "a")
        res.append([dif, name, code])
    res.sort(key=lambda x:-x[0])

 

3.

 

정렬된 res 가지고
for문 돌면서 몫과 나머지를 이용하여 총 악보구성을 다 만듦
그리고 if 문으로 m 이 full 에 들어있으면
해당 res[i][2] (노래제목) 을 리턴
조건 일치하는거 없으면 None리턴
    for i in range(len(musicinfos)):
        a, b = divmod(res[i][0],len(res[i][2]))
        full = res[i][2] * a + res[i][2][:b]

        if m in full:
            return res[i][1]
    else:
        return'(None)'
반응형

댓글