📖  문제

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

 

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

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

programmers.co.kr

 

💻  코드

def parse(m):
    p = list()
    for i in range(len(m)):
        if m[i] == '#':
            continue
        elif i != len(m) - 1 and m[i + 1] == '#':
            p.append(m[i:i + 2] + '-')
        else:
            p.append(m[i] + '-')
    return p


def solution(m, musicinfos):
    # musicinfos 전처리
    plays = list()
    for info in musicinfos:
        sl = info.split(',')
        pl = parse(sl[3])
        length = (int(sl[1].split(':')[0]) * 60 + int(sl[1].split(':')[1]))-(int(sl[0].split(':')[0]) * 60 + int(sl[0].split(':')[1]))
        play = pl * (length // len(pl)) + pl[:(length % len(pl))]
        plays.append((sl[2], ''.join(play), length))
    # 방금그곡 후보 검색
    candi = []
    for play in plays:
        if ''.join(parse(m)) in play[1]:
            candi.append(play)
    # 방금그곡 최종 선정
    if len(candi) == 0:
        return '(None)'
    candi.sort(key=lambda x: x[2], reverse=True)
    return candi[0][0]

 

🙌  한마디

구현(Implementation) 문제였고, in 연산자 사용 시 #이 붙은 음을 어떻게 구분하느냐가 핵심이었다. 한 음이 끝날 때 '-' 문자를 추가해 음이 종료되었음을 분별할 수 있도록 코드를 짰다. #이 붙은 음을 소문자로 바꾸어 구분짓는 다른 사람들의 풀이(ex.C#->c, F#->f)도 보았는데, 이것도 좋은 아이디어같다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기