Notice
Recent Posts
Recent Comments
Link
S E P H ' S
[Python] 방금그곡 본문
코딩테스트 연습 - [3차] 방금그곡
방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,
programmers.co.kr
문제보기
풀이
musicinfos의 전처리가 필요하다.
1. 코드 중에 #이 붙은 음들은 소문자로 Replace
2. 노래 시작시간, 종료시간으로 재생시간을 구하고 시작.
3. 재생시간이 음보다 짧은 경우
4. 재생시간이 음보다 긴 경우
3, 4의 경우에 맞게 melody를 구성하고, m이 melody에 포함된다면 answer에 추가한다.
이 때, 정답의 조건에 '조건에 일치하는 음악이 여러 개일 때에는 재생된 시간이 제일 긴 음악제목을 반환하고, 그것도 같을 경우는 먼저 입력된 음악 제목을 반환'이라는 조건이 있다. 이 조건에 따라서, answer에 추가할 때 idx와 playtime, musicname을 리스트 만들어 추가.
5. answer의 길이가 0이 아니라면 playtime이 긴 순대로 정렬, idx 오름차순으로 정렬하고 answer 배열의 첫번째의 제목을 반환.
6. answer의 길이가 0이라면 (None) 을 반환
def changecode(m):
m = m.replace('C#', 'c')
m = m.replace('D#', 'd')
m = m.replace('F#', 'f')
m = m.replace('G#', 'g')
m = m.replace('A#', 'a')
return m
def solution(m, musicinfos):
answer = []
m = changecode(m)
for idx, musicinfo in enumerate(musicinfos):
musicinfo = musicinfo.split(",")
# playtime, code, musicname
st, et, musicname, code = musicinfo[0], musicinfo[1], musicinfo[2], musicinfo[3]
hour = 1 * (int(et.split(":")[0]) - int(st.split(":")[0]))
if hour == 0:
playtime = int(et.split(":")[1]) - int(st.split(":")[1])
else:
playtime = 60 * hour + int(et.split(":")[1]) - int(st.split(":")[1])
code = changecode(code)
# 재생시간이 음보다 짧은 경우
if len(code) >= playtime:
melody = code[0:playtime]
# 재생시간이 음보다 긴 경우
else:
q, r = divmod(playtime, len(code))
melody = code * q + code[0:r]
# 주어진 m이 Melody에 포함되면 후보에 저장.
if m in melody:
answer.append([idx, playtime, musicname])
if len(answer) != 0:
answer.sort(key=lambda x: (-x[1], x[0]))
return answer[0][2]
return "(None)"
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 스킬트리 (0) | 2021.08.27 |
---|---|
[Python] 방문 길이 (0) | 2021.08.26 |
[Python] 압축 (0) | 2021.08.26 |
[Python] 파일명 정렬 (0) | 2021.08.25 |
[Python] 124 나라의 숫자 (0) | 2021.08.25 |