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]