문제
https://programmers.co.kr/learn/courses/30/lessons/17683
코딩테스트 연습 - [3차] 방금그곡
방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,
programmers.co.kr
코드
1) 제목과 멜로디를 딕셔너리에 저장
def write_melody(item):
li = []
i = 0
while i < len(item)-1:
if item[i+1].isalpha():
li.append(item[i])
i += 1
else:
li.append(item[i:i+2])
i += 2
li.append(item[-1])
return li
def cal_total_melody(melody, info):
minutes = int(info[1].split(':')[1]) - int(info[0].split(':')[1])
hours = int(info[1].split(':')[0]) - int(info[0].split(':')[0])
play_time = hours*60 + minutes
a, b = divmod(play_time, len(melody))
total_melody = melody*a + melody[:b]
return total_melody
def solution(m, musicinfos):
answer = []
dict = {}
for i in range(len(m)):
remember_melody = write_melody(m)
for info in musicinfos:
info = info.split(',')
melody = write_melody(info[3])
dict[info[2]] = cal_total_melody(melody, info)
list_of_key = list(dict.keys())
list_of_value = list(dict.values())
for j in range(len(list_of_value)):
for k in range(len(list_of_value[j])):
if m[0] == list_of_value[j][k]:
if remember_melody == list_of_value[j][k:k+len(remember_melody)]:
position = list_of_value.index(list_of_value[j])
return list_of_key[position]
return "(None)"
2) C#과 같은 멜로디를 소문자 c로 저장하게 구현
def solution(m, musicinfos):
answer = []
time = []
music = []
def cal_time(starttime, endtime):
starttime = starttime.split(':')
endtime = endtime.split(':')
minutes = int(endtime[1]) - int(starttime[1])
hours = int(endtime[0]) - int(starttime[0])
play_time = hours*60 + minutes
return play_time
def modify_melody(melody):
melody = melody.replace('C#', 'c')
melody = melody.replace('D#', 'd')
melody = melody.replace('F#', 'f')
melody = melody.replace('G#', 'g')
melody = melody.replace('A#', 'a')
return melody
def cal_allmelody(melody, play_time):
a, b = divmod(play_time, len(melody))
allmelody = melody*a + melody[:b]
return allmelody
for i in range(len(musicinfos)):
musicinfos[i] = musicinfos[i].split(',')
time.append(musicinfos[i][0:2])
play_time = cal_time(musicinfos[i][0], musicinfos[i][1])
all_melody = cal_allmelody(modify_melody(musicinfos[i][3]), play_time)
music.append([play_time, musicinfos[i][2], all_melody])
for j in range(len(music)):
m = modify_melody(m)
if m in music[j][2]:
answer.append(music[j])
if len(answer) == 0:
return "(None)"
else:
answer = sorted(answer, reverse = True)
return answer[0][1]
def solution(m, musicinfos):
answer = []
time = []
music = []
def cal_time(starttime, endtime):
starttime = starttime.split(':')
endtime = endtime.split(':')
minutes = int(endtime[1]) - int(starttime[1])
hours = int(endtime[0]) - int(starttime[0])
play_time = hours*60 + minutes
return play_time
def modify_melody(melody):
melody = melody.replace('C#', 'c')
melody = melody.replace('D#', 'd')
melody = melody.replace('F#', 'f')
melody = melody.replace('G#', 'g')
melody = melody.replace('A#', 'a')
return melody
def cal_allmelody(melody, play_time):
a, b = divmod(play_time, len(melody))
allmelody = melody*a + melody[:b]
return allmelody
for i in range(len(musicinfos)):
musicinfos[i] = musicinfos[i].split(',')
time.append(musicinfos[i][0:2])
play_time = cal_time(musicinfos[i][0], musicinfos[i][1])
all_melody = cal_allmelody(modify_melody(musicinfos[i][3]), play_time)
music.append([play_time, musicinfos[i][2], all_melody])
for j in range(len(music)):
m = modify_melody(m)
if m in music[j][2]:
answer.append(music[j])
if len(answer) == 0:
return "(None)"
else:
answer = sorted(answer, key = lambda x: (-x[0], x[1])) #이부분 수정 후 성공!
return answer[0][1]
'⏳ 알고리즘 > python 알고리즘 문제 풀이' 카테고리의 다른 글
프로그래머스 - LV3. 단어 변환 (0) | 2022.03.25 |
---|---|
프로그래머스 - LV3. 네트워크 (0) | 2022.03.25 |
프로그래머스 - 삼각 달팽이(월간 코드 챌린지 시즌1) (0) | 2021.11.19 |
프로그래머스 - LV2. 더 맵게 (0) | 2021.11.06 |
프로그래머스 - 숫자 문자열과 영단어( 2021 카카오 채용연계형 인턴십 ) (0) | 2021.10.31 |