import math
import re
def solution(m, musicinfos):
musicinfos = [_.split(',') for _ in musicinfos]
m = melodyconvert(m)
for music in musicinfos:
music[3] = melodyconvert(music[3])
start = int(music[0].split(':')[0])*60 + int(music[0].split(':')[1])
end = int(music[1].split(':')[0])*60 + int(music[1].split(':')[1])
music.append(end - start + 1) # 재생시간 : music[4]
if len(music[3]) > music[4]:
music[3] = music[3][:music[4]]
else:
times = math.ceil(music[4]/len(music[3]))
music[3] = (music[3]*times)[:music[4]]
result = [ (music[2], music[4]) for music in musicinfos if m in music[3] ]
if result == []:
return '(None)'
result.sort(key = lambda k : k[1], reverse = True)
return result[0][0]
def melodyconvert(melody):
melodydict = {'C#':'H', 'D#':'I', 'F#':'J', 'G#':'K', 'A#':'L'}
for m in melodydict.keys():
melody = re.sub(m, melodydict[m], melody)
return melody
melodyconvert는 이렇게 뒤에 #이 붙어있는 것들을 예외처리 해주지 않을 경우 C#을 그냥 C라고 인식해버리기 때문에 이렇게 다른 문자로 바꿔주었다.
그리고 시간에 관련된 것들은 하나의 숫자로 묶어서 더하고 빼는 데에 용이하도록 바꿔주였다.
list comprehension의 중요성을 많이 느낀다.
이걸 모르고 이 문제를 풀었더라면 코드 라인 수도 길어지고, 시간도 많이 걸렸을 텐데....
나에게 아쉬운 건 아직 generator에 대한 자유자재로 사용이 잘 안 된다는 것. <- 공부하자!
'알고리즘' 카테고리의 다른 글
programmers 예산 (0) | 2019.09.09 |
---|---|
2018 kakao blind recruitment 길 찾기 게임 (0) | 2019.09.09 |
2017 kakao blind recruitment 3차 자동완성 (0) | 2019.09.06 |
2017 kakao blind recruitment 3차 파일명 정렬 (0) | 2019.09.05 |
2017 kakao blind recruitment 3차 압축 (0) | 2019.09.05 |