취준시절/프로그래머스

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT - [3차] 방금그곡

MAYMIN 2021. 9. 9. 17:01
728x90
SMALL

일치하는 음악이 여러개라면 ??? 재생시간이 제일 긴 음악제목 반환

재생시간마저 같으면???  먼저 입력된거반환

 

이 조건을 처리 안해줘서 테스트 케이스 두개를 계속 통과 못했다 ;_;

그래서 여러개일 경우를 고려하여 result라는 배열에 일치하는것들을

입력된 순서 확인을 위한 index, 재생시간 확인을 위한 minutes, 출력시 필요한 title을 묶어서 넣어주었다.

 

result의 개수가 여러개이면 result를 처음에는 재생시간이 긴 순서대로 정렬해야하니 -를 붙여서 -x[1]로 정렬한다.

그리고 재생시간이 같다면 먼저 입력된 것을 반환해줘야하니까 x[0]자리에 있는 index순으로 정렬되게 한 다음에

return을 해주었다.!!!!! 구우웃 !!!!!!

 

 

def convert(melody):
    melody = melody.replace('E#', 'e')
    melody = melody.replace('C#', 'c')
    melody = melody.replace('D#', 'd')
    melody = melody.replace('F#', 'f')
    melody = melody.replace('G#', 'g')
    melody = melody.replace('A#', 'a')

    return melody


def solution(m, musicinfos):
    # 음악제목, 재생이 시작되고 끝난 시각, 악보제공
    # 사용되는 음 C,C#,D,D#,E,F,F#,G,G#,A,A#,B
    # 각 음은 1분에 1개씩 재생, 음악길이>재생시간 : 첨부터 반복해서 재생 else: 첨~재생시간만큼
    # 00:00 을 넘는 일은 없다
    # 일치하는 음악이 여러개 : 재생시간이 제일 긴 음악제목 반환, 재생시간마저 같으면: 먼저 입력된거반환
    # 조건 일치 no :  (None)을 반환한다.
    # m : 기억한 멜로디를 담은 문자열
    # musicinfos : 방송된 곡의 정보 배열
    # -> 음악시작시각 HH:MM , 끝난시각 HH:MM ,음악제목,악보정보
    
    result = list()
    m = convert(m)
    index = 0
    for music in musicinfos:
        index += 1
        start, end, title, info = music.split(',')
        endhour, endminute = end.split(':')
        starthour, startminute = start.split(':')
        endhour, endminute, starthour, startminute = int(endhour), int(endminute), int(starthour), int(startminute)
        minutes = (abs(endhour - starthour) * 60) + abs(endminute - startminute)
        realinfo = ''
        cnt = 0
        info = convert(info)

        while len(realinfo) < int(minutes):
            if cnt == len(info):
                cnt = 0
            realinfo += info[cnt]
            cnt += 1
        if m in realinfo:
            result.append([index, minutes, title])
    if len(result) == 0:
        return '(None)'
    elif len(result) == 0:
        return result[0][2]
    else:
        result.sort(key=lambda x: (-x[1], x[0]))
        return result[0][2]

 

코테 공부 초반에 이 문제 봤을 때는 너무 어려워서 어떻게 풀지 걱정했는데, 지금 풀어보니 쉬웠다. 😆

그동안 공부하면서 성장했단 말이겠쥐 ?~?!?!?~ >_<

느리더라도 열심히 꾸준히 하자 화이팅 취준 화이티잉 

 

728x90
LIST