본문 바로가기

알고리즘/프로그래머스

[프로그래머스][2018 KAKAO BLIND RECRUITMENT][Python] 방금그곡

[ 문제 ]

 


[출제 의도]

 

  • 문자열 처리

[ 문제 풀이 ]

 

ABC는 ABC#안에 들어있지 않지만, ABCD안에는 들어있습니다. C과 C#은 다르기 때문입니다.

그래서 #의 문자열 처리가 이 문제의 핵심입니다.

 

저는 C#은 c로 치환하여 C#과 C와의 차이를 두었습니다. 다른 '대문자#' 문자열에도 마찬가지로 적용했습니다.

 


[ 정답 코드 ]

 

def solution(m, musicinfos):
    answer = ["(None)", 0]

    for info in musicinfos:
        start, end, title, song = info.split(",")

        # 악보 변환
        ch = {"C#": "c", "D#": "d", "F#": "f", "G#": "g", "A#": "a", "E#": "e"}
        for key in ch.keys():
            song = song.replace(key, ch[key])
            m = m.replace(key, ch[key])

        song_len = len(song)

        # 재생길이 확인
        play_time = (int(end[:2]) - int(start[:2])) * 60 + (int(end[3:5]) - int(start[3:5]))

        # 음악길이 < 재생길이
        if song_len < play_time:
            result = song * (play_time // song_len) + song[:play_time % song_len]

        # 음악길이 => 재생길이
        else:
            result = song[:play_time]

        # 비교 => 1) 재생된 시간이 제일 긴 음악 제목, 2) 먼저 입력된 음악 제목
        if "".join(m) in "".join(result) and answer[1] < play_time:
            answer[0] = title
            answer[1] = play_time

    return answer[0]


print(solution("FW", ["13:00,13:01,WORLD,FWDF"]))