일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 코딩테스트
- BFS
- CodingTest
- 코테
- 파이썬
- 코딩
- 완전탐색
- import re
- 연습문제
- Queue
- coding test
- level4
- lambda
- mysql
- join
- time complexity
- Stack
- collections
- counter
- Level2
- programmers
- 시간복잡도
- sql
- lv4
- python
- 조합
- itertools
- 프로그래머스
- coding
- 데이터분석
- Today
- Total
ror_coding
[Programmers] [3차] 방금그곡 - 17683 본문
728x90
datetime 을 이용하여 시간 차이 '분'을 구하는 방법과 요구하는 길이만큼 멜로디를 늘려 풀기 !
Question
네오는 자신이 기억한 멜로디를 가지고 방금그곡을 이용해 음악을 찾는다. 그런데 라디오 방송에서는 한 음악을 반복해서 재생할 때도 있어서 네오가 기억하고 있는 멜로디는 음악 끝부분과 처음 부분이 이어서 재생된 멜로디일 수도 있다. 반대로, 한 음악을 중간에 끊을 경우 원본 음악에는 네오가 기억한 멜로디가 들어있다 해도 그 곡이 네오가 들은 곡이 아닐 수도 있다. 그렇기 때문에 네오는 기억한 멜로디를 재생 시간과 제공된 악보를 직접 보면서 비교하려고 한다. 다음과 같은 가정을 할 때 네오가 찾으려는 음악의 제목을 구하여라.
- 방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
- 네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
- 각 음은 1분에 1개씩 재생된다. 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다.
- 음악이 00:00를 넘겨서까지 재생되는 일은 없다.
- 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
- 조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다.
Point
- # 처리를 위해 소문자를 이용해서 한 글자로 치환. (convert_music 함수)
- strptime을 이용하여 재생시간을 '분'으로 구함. (play_time 변수에 저장)
- 저장된 후보 중에서 play_time이 가장 큰 것을 구함. (이때 재생 길이가 같은 것들이 있을 때, 먼저 재생된 음악을 고르라고 했는데 음악 재생을 순서대로 했기 때문에 재생 길이가 같다면 앞쪽에 배치되어 있음)
Code
from datetime import datetime as dt
def solution(m, musicinfos):
candidates = []
def convert_music(music):
return music.replace('C#','c').replace('D#','d').replace('F#','f').replace('G#','g').replace('A#','a').replace('B#','b')
m = convert_music(m)
for info in musicinfos:
t1, t2, title, music = info.split(',')
play_time = int((dt.strptime(t2,'%H:%M')-dt.strptime(t1,'%H:%M')).total_seconds()//60)
music = convert_music(music)
full_music = (music*((play_time//len(music))+1))[:play_time]
if m in full_music: candidates.append((play_time, title))
return sorted(candidates, key = lambda x : (-x[0]))[0][1] if candidates else "(None)"
now me
On my github
728x90
'Algorithm > Python' 카테고리의 다른 글
[Programmers] 줄 서는 방법 - 12936 (0) | 2024.12.31 |
---|---|
[Programmers] 무인도 여행 - 154540 (0) | 2024.12.30 |
[Python] datetime Library (1) | 2024.12.28 |
[Programmers] 미로 탈출 - 159993 (0) | 2024.12.22 |
[Programmers] 메뉴 리뉴얼 - 72411 (1) | 2024.12.22 |