프로그래머스/lv.2

[3차] 방금그곡

bingual 2024. 3. 8. 01:11
반응형

 

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

 

프로그래머스

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

programmers.co.kr

문제풀이

해당 문제는 2월 21일 자 기준으로 지문에 누락된 정보가 있다. 34번 테스트 케이스의 경우 조건을 전부 만족하는데도 실패가 뜨는데 치환 과정에서 B#을 추가해줘야 한다. 이는 지문에 적혀있지 않은 정보다.

 

  • "#"이 들어간 문자열을 한 글자로 치환해주어야 하며 각 시간은 단위로 변환한다.
  • 음악이 반복 재생되는 구간을 특정한 뒤 m이 그 구간에 포함되어 있다면 해당 곡이 정답이 된다.
  • 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다
def solution(m, musicinfos):
    answer = []
    n = len(m)
    m = replace(m)

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

        full_song = (song * ((end - start) // len(song) + 1))[: end - start]
        if m in full_song:
            answer.append((title, end - start))

    if not answer:
        return "(None)"
    else:
        return sorted(answer, key=lambda x: -x[1])[0][0]


def convert(time):
    h, m = time.split(":")
    return int(h) * 60 + int(m)


def replace(s):
    return (
        s.replace("C#", "c")
        .replace("D#", "d")
        .replace("F#", "f")
        .replace("G#", "g")
        .replace("A#", "a")
        .replace("B#", "b")
    )

 

댓글수0