문제
https://school.programmers.co.kr/learn/courses/30/lessons/17683
풀이
- 내가 기억한 멜로디와 musicinfos에 있는 멜로디와 비교하기 위해 "C"과 "C#"을 구별하는 방법이 필요하다.
- 간단하게 replace를 활용해 "#"이 포함된 문자는 다른 문자로 대체한다. (ex. C# -> H)
- 각 음은 1분에 1개씩 재생되기 때문에 재생 시간이 멜로디의 길이보다 클 경우 멜로디의 길이를 재생 시간만큼 늘려준다.
- "조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다." 라는 조건을 충족하기 위해 재생 시간은 내림차순, index는 오름차순으로 정렬해 정답을 추출한다.
코드
from collections import deque
def replace_melody(melody, other_melody):
for key in other_melody:
melody = melody.replace(key, other_melody[key])
return melody
def solution(m, musicinfos):
answer = []
runtime = []
titles = []
melodies = []
other_melody = {"A#": "H", "C#": "I", "D#": "J", "F#": "K", "G#": "L"}
m = replace_melody(m, other_melody)
for musicinfo in musicinfos:
start, end, title, melody = musicinfo.split(",")
start = start.split(":")
end = end.split(":")
melody = replace_melody(melody, other_melody)
runtime.append((int(end[0])*60 + int(end[1]) - (int(start[0])*60 + int(start[1]))))
titles.append(title)
melodies.append(melody)
for i, melody in enumerate(melodies):
melody = melody*(runtime[i]//len(melody)+1)
j = runtime[i]
if m in melody[:j]:
answer.append((runtime[i], i))
answer.sort(key=lambda x: [-x[0], x[1]])
if not answer:
return "(None)"
else:
return titles[answer[0][1]]
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 길 찾기 게임(Python) (0) | 2023.02.16 |
---|---|
[프로그래머스] 인사고과 (Python) (0) | 2023.02.05 |
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - 순위 검색 (Python) (0) | 2023.01.24 |