STUDY/Algorithm

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

sinawi95 2021. 6. 26. 22:46
728x90

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

 

코딩테스트 연습 - [3차] 방금그곡

방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,

programmers.co.kr

def solution(m, musicinfos):
    answer = ''
    answer_playtime = 0
    for info in musicinfos:
        # 문자열 파싱
        s, e, title, melody = info.split(',')
        sh, sm = map(int, s.split(':'))
        sm_total = sh * 60 + sm
        eh, em = map(int, e.split(':'))
        em_total = eh * 60 + em
        playtime = em_total - sm_total
        
        # "x"인지 "x#"인지 확인하기 위해 m의 각 음계마다 분리(쉼표를 넣어줌)
        tmp_m = []
        for i in range(len(m)):
            if m[i] == "#":
                continue
            elif i + 1 < len(m) and m[i + 1] == "#":
                tmp_m.append(m[i:i + 2])
            else:
                tmp_m.append(m[i])
        tmp_m2 = ''
        for i in range(len(tmp_m)):
            tmp_m2 += tmp_m[i] + ','
        
        #  melody의 각 음계마다 분리(쉼표를 넣어줌)
        tmp_melody = []
        for i in range(len(melody)):
            if melody[i] == "#":
                continue
            elif i + 1 < len(melody) and melody[i + 1] == "#":
                tmp_melody.append(melody[i:i + 2])
            else:
                tmp_melody.append(melody[i])
        # playtime만큼 멜로디 작성
        tmp_melody2 = ''
        for i in range(playtime):
            tmp_melody2 += tmp_melody[i % len(tmp_melody)] + ','
            
        # 쉼표를 포함한 멜로디가 포함되어있을때, 플레이타임이 가장 긴 제목 저장
        if tmp_m2 in tmp_melody2:
            if answer_playtime < playtime:
                answer = title
                answer_playtime = playtime

    return answer if answer else "(None)"

문자열 파싱 문제이다.

여기서 애를 먹었던 부분은 C와 C#을 구분하는 부분이었는데

어렵게 생각하지 않고 ','를 붙여서 구분했다.

단계별로 나누면 이렇게 된다.