코테 노트/프로그래머스

Level 2 [3차] 방금그곡 <2018 KAKAO BLIND RECRUITMENT> Python 3

화요밍 2022. 3. 25. 22:37
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/17683?language=python3 

 

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

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

programmers.co.kr

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

def solution(m, musicinfos):
    musics = []
    m = m.replace('C#', 'H').replace('D#', 'I').replace('F#', 'J').replace('G#', 'K').replace('A#', 'L')

    for info in musicinfos:
        info = info.split(",")
        info[0] = info[0].split(":")
        info[1] = info[1].split(":")
        if int(info[1][1]) < int(info[0][1]):
            mins = int(info[1][1]) + 60 - int(info[0][1])
            hours = int(info[1][0]) - 1 - int(info[0][0])
        else:
            mins = int(info[1][1]) - int(info[0][1])
            hours = int(info[1][0]) - int(info[0][0])
        time = mins + hours*60
        info[3] = info[3].replace('C#', 'H').replace('D#', 'I').replace('F#', 'J').replace('G#', 'K').replace('A#', 'L')
        musics.append([time, len(info[3]), info[2], info[3]])
        
    musics.sort(key = lambda x: -x[0])
    
    for time, length, title, score in musics:
        if time < len(m): continue
        if time <= len(score):
            if m in score[:time]: return title
            continue
        ptime = max(len(m), time)
        music = score * (ptime//len(score)+1)
        if m in music: return title
    
    return "(None)"

풀이 과정

풀이 시간 43분

def solution(m, musicinfos):
    musics = []
    #음 변경 C# -> H, D# -> I, F# -> J, G# -> K, A# -> L
    m = m.replace('C#', 'H').replace('D#', 'I').replace('F#', 'J').replace('G#', 'K').replace('A#', 'L')

    for info in musicinfos:
    	#info[0] = 시작 시간, info[1] = 끝난 시간, info[2] = 제목, info[3] = 악보
        info = info.split(",")
        info[0] = info[0].split(":")
        info[1] = info[1].split(":")
        
        #재생 시간 분으로 바꾸기
        if int(info[1][1]) < int(info[0][1]):
            mins = int(info[1][1]) + 60 - int(info[0][1])
            hours = int(info[1][0]) - 1 - int(info[0][0])
        else:
            mins = int(info[1][1]) - int(info[0][1])
            hours = int(info[1][0]) - int(info[0][0])
        time = mins + hours*60
        
        #악보 음 변경 C# -> H, D# -> I, F# -> J, G# -> K, A# -> L
        info[3] = info[3].replace('C#', 'H').replace('D#', 'I').replace('F#', 'J').replace('G#', 'K').replace('A#', 'L')
        musics.append([time, len(info[3]), info[2], info[3]])
    
    #[재생시간(분), 악보 길이, 제목, 악보]
    #재생시간을 기준으로 내림차순 정렬
    musics.sort(key = lambda x: -x[0])
    
    for time, length, title, score in musics:
    	#재생시간이 m 시간보다 작은 경우, 방금 그 곡이 아니다
        if time < len(m): continue
        
        #악보 길이가 재생시간보다 크거나 같은 경우,
        if time <= len(score):
        	#처음부터 재생시간 동안 재생한 음에 m이 속하면, 방금 그곡이다
            if m in score[:time]: return title
            continue
        
        #m 시간과 재생시간 중 긴 시간을 ptime으로 지정
        ptime = max(len(m), time)
        
        #반복재생한 악보에 m이 속한 경우, 방금 그곡이다
        music = score * (ptime//len(score)+1)
        if m in music: return title
    
    return "(None)"

#시간복잡도 = O(nlog n), 공간복잡도 = O(n)

참고

 

Level 2 [3차] n진수 게임 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17687?language=python3 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여..

hwayomingdlog.tistory.com

 

Level 2 [3차] 압축 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17684?language=python3 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] program..

hwayomingdlog.tistory.com

 

Level 2 [3차] 파일명 정렬 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17686?language=python3 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히..

hwayomingdlog.tistory.com

  • 5. 자동완성

 

728x90
반응형