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

[Python/프로그래머스]방금그곡_구현

개발자 덕구🐾 2022. 10. 19. 21:28
728x90

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

어렵지 않아보여서 풀었었다! 

코드 실행으로는 3개의 예제 모두 맞았는데 채점에서 다 틀렸다🤦‍♀️

답을 찾아보니 훨씬 효율적이고 깔끔하게 만든 코드가 있었다. 

 

 

 

나도 깔끔하게 , 간단하게 코드를 만들고 싶다...

 

 

 

 

import math
def solution(m, musicinfos):
    answer = None

    m = m.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')
    
    for music in musicinfos :
        start, end, title, code = music.split(',')
        
        hour,minute = map(int,start.split(':'))
        start = hour * 60 + minute 
        
        hour,minute = map(int,end.split(':'))
        end = hour * 60 + minute 
            
        during = end - start 

        code = code.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')
        code *= math.ceil(during/len(code))
        code = code[:during]
        
        if m not in code :
            continue 
        # 재생시간이 제일 긴, 먼저 입력된 
        if answer == None or answer[0] < during or (answer[0] == during and answer[1] > start) : 
            answer = (during, start,title)
    if answer :
        return answer[-1]
    
    return "(None)"

 

 

 

C#과 같은 2글자를 1글자를 replace를 이용하여 치환한다. 

m = m.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')

이런 식으로 주르륵 .replace를 달면된다!!

 

 

 

musicinfos를 돌면서 각자 start, end, title, code 로 split한다. 

code는 위 코드와 동일하게 #을 하나의 코드로 변경해준다. 

이어 붙이는 부분을 나는 굉장히 더럽게 했는데 간단하게 할 수 있다. 

 

 

math.ceil 을 이용해서 (지속시간 / 코드의 길이 )를 올림한 다음 해당 수만큼  * 하면 된다. 

 

올림은 import math 해서 math.ceil 하면 된다. 

 

그런 다음 리스트 슬라이싱을 이용해 지속 시간만큼 잘라준다. 

 

 

만약 m 이 code에 포함되어있지 않다면 볼필요가 없고 

문제에서 나온대로 재생시간이 제일 길고  !  동일한 경우에는 먼저 입력된 값을 answer에 저장한다. 

 

 

 

answer 에 값이 있다면 노래 이름을 반환한다. 

없다면 "(None)"을 반환한다. 

 

 

 

 

 

 


 

 

 

 

 

내 생각 ; 이 문제의 핵심 코드 : 

 

 

1. 반복횟수만큼 * 해주기 

code *= math.ceil(during/len(code))

 

 

2. #을 포함하여 하나의  문자로 만들기 위해 replace를 이용하기 

code = code.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')

 

 

 

 

 

 

참고 블로그 : 

https://roomedia.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%B0%A9%EA%B8%88%EA%B7%B8%EA%B3%A1-2018-KAKAO-BLIND-RECRUITMENT

 

[프로그래머스] 방금그곡 #파이썬 #치환 #문자열 [2018 #KAKAO BLIND RECRUITMENT]

programmers.co.kr/learn/courses/30/lessons/17683# 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는

roomedia.tistory.com

 

 

반응형