Problem Solving/Programmers

[Programmers]2018 KAKAO BLIND RECRUITMENT: [3차] 방금그곡

이진2 2021. 3. 7. 00:08

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

 

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

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

programmers.co.kr

이것도 시간을 활용한 문제

아직 코테를 그렇게 많이 보진 않았지만 대기업 코테에서는 시간을 문자열 처리할 수 있는지를 많이 보는 것 같다

그래서 C++이 그런 코테 스타일에는 적합하지 않다고 느꼈고, 파이썬의 datetime 모듈에 대한 연습을 하고 있다.

 

datetime 모듈을 이용하면 문자열을 datetime 객체로 변환시킬 수 있고(strptime메소드), timedelta를 이용해서 시간 차를 구할 수도 있고, 해당 객체를 다시 문자열로 변화시킬 수 있다(strftime메소드).

이번 문제에서는 그걸 이용해서 시간 차가 몇 분인지 구해주었고, 해당 minute만큼 전체 음을 multiply해서 그 안에 찾으려는 음절이 있는지 검사해줬다.

경계값 체크때문에 조금 헤맸던 문제

 

import datetime
import re
import math

def solution(lyrics, musicinfos):
    answer = ['',0]

    for st in musicinfos:
        info=st.split(',')
        t=[]

        for i in range(2):
            t.append(datetime.datetime.strptime(info[i],'%H:%M'))
        pt=round((t[1]-t[0]).seconds/60)

        melody=[]
        for i in info[3]:
            if i=='#':
                melody[-1]+='#'
            else: melody.append(i)
        
        M=''
        for i in range(pt):
            M+=melody[i%len(melody)]

        for i in range(len(M)-len(lyrics)+1):
            if M[i]=='#':continue
            t=M[i:i+len(lyrics)]
            if t==lyrics:
                if i<len(M)-len(lyrics) and M[i+len(lyrics)]=='#':continue
                if pt>int(answer[1]):
                    answer[0]=info[2]
                    answer[1]=pt

    if answer[0]=='': return '(None)'
    return answer[0]