보물창고 블로그

2018 KAKAO BLIND RECRUITMENT 3차 방금그곡 본문

알고리즘 풀이/프로그래머스

2018 KAKAO BLIND RECRUITMENT 3차 방금그곡

홋 메 2020. 3. 26. 16:36
728x90

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/17683

 

프로그래머스

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

programmers.co.kr

#처리를 용이하기 위해 별도의 딕셔너리를 선언하고 이를 통해 변환하여 처리에 용이함을 더했다.  시간 문자열 처리의 용이함을 위해 datetime 모듈을 사용하였다.

mdic = {'C': 'ㄱ', 'C#': 'ㄴ', 'D': 'ㄷ', 'D#': 'ㄹ', 'E': 'ㅁ', 'E#': 'ㅂ ', 'F': 'ㅅ', 'F#': 'ㅇ', 'G': 'ㅈ', 'G#': 'ㅊ',
        'A': 'ㅋ', 'A#': 'ㅌ', 'B': 'ㅍ'}


def change(str1):
    length = len(str1)
    ns = ''
    idx = 0
    while idx < length:
        if mdic.get(str1[idx:idx + 2]) is None:
            ns += mdic[str1[idx]]
            idx += 1
        else:
            ns += mdic[str1[idx:idx + 2]]
            idx += 2
    return ns


def solution(m, musicinfos):
    import datetime
    new = change(m)
    answer = ''
    al = -1
    for mu in musicinfos:
        mu = mu.split(',')
        length = datetime.datetime.strptime(mu[1], '%H:%M') - datetime.datetime.strptime(mu[0], '%H:%M')
        length = int(length.total_seconds() // 60)
        l = len(mu[3])
        n1 = change(mu[3])
        n2 = ''
        for j in range(length):
            if j < len(n1):
                n2 += n1[j]
            else:
                n2 += n1[j % len(n1)]
        if new in n2:
            if al < length:
                al = length
                answer = mu[2]

    if al == -1:
        answer = '(None)'

    return answer
Comments