sound = {'A#': '1', 'C#': '2', 'D#': '3', 'F#': '4', 'G#': '5'}
def solution(m, musicinfos):
answer = ''
result = []
m = m.replace('A#', sound['A#'])
m = m.replace('C#', sound['C#'])
m = m.replace('D#', sound['D#'])
m = m.replace('F#', sound['F#'])
m = m.replace('G#', sound['G#'])
for music in musicinfos:
title, time, melody = music_melody(m, music)
if m in melody:
result.append([title, time])
result.sort(key=lambda x: -x[1])
if result:
answer = result[0][0]
else:
answer = '(None)'
return answer
def music_melody(m, music):
start, end, title, melody = music.split(',')
start_hour, start_minute = map(int, start.split(':'))
end_hour, end_minute = map(int, end.split(':'))
hour = end_hour - start_hour
minute = end_minute - start_minute
time = hour*60 + minute
melody = melody.replace('A#', sound['A#'])
melody = melody.replace('C#', sound['C#'])
melody = melody.replace('D#', sound['D#'])
melody = melody.replace('F#', sound['F#'])
melody = melody.replace('G#', sound['G#'])
if time >= len(melody):
temp = time // len(melody)
temp2 = time % len(melody)
for _ in range(temp):
melody += melody
if len(melody) > len(m):
break
melody += melody[:temp2]
else:
temp2 = time % len(melody)
melody = melody[:temp2]
return title, time, melody
2018 카카오 블라인드 3차 - 4번
1. 딕셔너리를 이용해서 m을 먼저 replace해준다
2. musicinfos의 값들을 각각 music_melody함수를 이용해서 title, time, 총길이의 melody를 반환 받는다
- split을 통해서 전부 분해해주고 time을 구해준다
- melody는 총시간동안 반복을 해서 받아준다 단 길이가 m의 길이보다 길어지면 멈춘다(안그러면 시간초과)
3. 총길이의 멜로디안에 m이 있다면 result에 [title,time]을 append
4. resulst를 time이 긴순서로 정렬
5. answer = result가 있다면 result[0][0], 없다면 '(None)'
6. answer 출력
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 실패율 (파이썬) (0) | 2022.02.15 |
---|---|
[프로그래머스] - 오픈채팅방 (파이썬) (0) | 2022.02.15 |
[프로그래머스] - 파일명 정렬 (파이썬) (0) | 2022.02.06 |
[프로그래머스] - 압축 (파이썬) (0) | 2022.02.06 |
[프로그래머스] - n진수 게임 (파이썬) (0) | 2022.02.06 |