알고리즘/풀이
[프로그래머스] 2018 카카오 블라인드 3차 방금그곡 파이썬
목표는 커리
2021. 5. 17. 22:21
728x90
SMALL
입출력 예시
m | musicinfos | answer |
---|---|---|
"ABCDEFG" | ["12:00,12:14,HELLO,CDEFGAB", "13:00,13:05,WORLD,ABCDEF"] | "HELLO" |
"CC#BCC#BCC#BCC#B" | ["03:00,03:30,FOO,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"] | "FOO" |
"ABC" | ["12:00,12:14,HELLO,C#DEFGAB", "13:00,13:05,WORLD,ABCDEF"] | "WORLD" |
설명
첫 번째 예시에서 HELLO는 길이가 7분이지만 12:00부터 12:14까지 재생되었으므로 실제로 CDEFGABCDEFGAB로 재생되었고, 이 중에 기억한 멜로디인 ABCDEFG가 들어있다.
세 번째 예시에서 HELLO는 C#DEFGABC#DEFGAB로, WORLD는 ABCDE로 재생되었다. HELLO 안에 있는 ABC#은 기억한 멜로디인 ABC와 일치하지 않고, WORLD 안에 있는 ABC가 기억한 멜로디와 일치한다.
제출답안
import datetime
def play_time(infomation):
end_time = datetime.datetime.strptime(infomation[1], '%H:%M')
start_time = datetime.datetime.strptime(infomation[0], '%H:%M')
play_hour = str(end_time - start_time).split(':')
replay_time = int(play_hour[0]) * 60 + int(play_hour[1])
return replay_time
def vs(song, timeleng):
if timeleng <= len(song):
song = song[:timeleng]
else:
multi, plus = divmod(timeleng, len(song))
song = song * multi + song[:plus]
return song
def solution(m, musicinfos):
before = []
answer = []
ma = -1
m = m.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a').replace("E#",
'e')
for i in musicinfos:
infomation = i.split(',')
replay_time = play_time(infomation)
play_song = infomation[3].replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace(
'A#', 'a').replace("E#", 'e')
code = vs(play_song, replay_time)
before.append([replay_time, infomation[2], code])
for i in before:
if m in i[2]:
ma = max(ma, i[0])
answer.append(i)
if len(answer) == 0:
return '(None)'
else:
for i in range(len(answer)):
if ma == answer[i][0]:
return answer[i][1]
- 우선 시간을 구해야 했기 때문에 datetime을 써서 시작시간과 끝시간의 차이를 구하고 분은 그대로 가져가고 시간은 시간 * 60해서 분으로 만들어서 분을 반환하는 함수를 만들었다.
- 그 다음에는 재생시간과 음악의 길이를 구해야했기 때문에 그것을 실행하는 함수를 만들었다.
- 악보정보와 재생 시간을 비교하여 다른 song을 저장했다. 악보정보가 짧으면 위에서 구했던 분으로 몫과 나머지를 구해서 음악정보를 완성했다.
- #이 들어간 계이름들은 #을 없애주었다.
- 그리고 문자열을 ,로 파싱해서 각각의 정보로 나누었고 위에서 만들었던 함수에 대입하여 값을 반환하였다.
- 리스트에 필요한 정보만 담았다.
- m이 음악정보에 있으면서 문제 조건에 있는 재생 시간이 가장 긴 것들만 추려서 다시 리스트에 담았다.
- 만약 answer에 값이 없으면 none를 값이 있을때 재생시간이 최댓값과 같으면서 제일 처음에 들어온 노래를 출력한다.
728x90
LIST