코딩테스트/프로그래머스

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

박소민 2022. 6. 20. 19:42
방금그곡
 

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

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

programmers.co.kr

 

 

  • 내 풀이 
    • 테스트 7,8,9,12,15,19 fail
      • 원인)
      • C# 과 같이 #이 붙은 음은 하나로 봐야 하기 때문에 재생시간에 따라 음길이를 조절할 때 유의해야함!
    • 기억한 음에 #이 붙은 경우를 동일한 음으로 생각하지 않도록 삭제
def solution(m, musicinfos):
    max_m=0
    answer=""
    for music in musicinfos:
        minute=0
        start, end, name, s=music.split(",")
        start_h,start_m=map(int,start.split(":"))
        end_h,end_m=map(int,end.split(":"))
        
        #재생시간 측정
        if end_m>=start_m:
            minute+=(end_m-start_m)
        else:
            end_h-=1
            end_m+=60
            minute+=(end_m-start_m)
        minute+=60*(end_h-start_h)
        
    #재생시간만큼 음길이 수정
        if len(s)<=minute:
            s*=(minute//len(s)+1)
        else:
            s=s[:minute]

    # 기억하는 멜로디에 #이 붙은 경우 삭제 
        m2=m+"#"
        s=s.replace(m2,'')
            
        if m in s:
        	#멜로디를 가진 노래가 여러개인 경우 음이 가장 긴 것
            #시간이 같은 경우는 먼저 나온 노래를 선택하도록 시간이 길 경우에만 값 대체
            if max_m<minute:
                answer=name
                max_m= minute
                
    if answer:
        return answer
    else:
        return "(None)"

 

 

  • 내 풀이
    • 원인) C# 과 같이 #이 붙은 음은 하나로 봐야 하기 때문에 재생시간에 따라 음길이를 조절할 때 유의해야함!
    • 해결 방안
      1. #의 개수만큼 minute에 더해주기
        • len(s)<=minute+n
      2. 또는 #을 지운 음의 길이랑 비교
        • len(s.replace("#",''))<=minute
def solution(m, musicinfos):
    max_m=0
    answer=""
    for music in musicinfos:
        minute=0
        start, end, name, s=music.split(",")
        start_h,start_m=map(int,start.split(":"))
        end_h,end_m=map(int,end.split(":"))
        
        #재생시간 측정
        if end_m>=start_m:
            minute+=(end_m-start_m)
        else:
            end_h-=1
            end_m+=60
            minute+=(end_m-start_m)
        minute+=60*(end_h-start_h)
        
    #재생시간만큼 음길이 수정
    # C# 처럼 #은 뒤의 알파벳과 하나의 음으로 생각해야한다
        n=s.count("#")
        if len(s)<=minute+n:
            s*=(minute+n//len(s)+1)
        else:
            s=s[:minute+n]

    # 기억하는 멜로디에 #이 붙은 경우 삭제 
        m2=m+"#"
        s=s.replace(m2,'')
            
        if m in s:
        	#멜로디를 가진 노래가 여러개인 경우 음이 가장 긴 것
            #시간이 같은 경우는 먼저 나온 노래를 선택하도록 시간이 길 경우에만 값 대체
            if max_m<minute:
                answer=name
                max_m= minute
                
    if answer:
        return answer
    else:
        return "(None)"