1. 문제
2. 풀이
- 문제가 어려운 편은 아닌데 문제를 잘 읽지 않으면 테스트케이스 통과가 어렵다.
- "조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다" 를 만족하지 않으면 테스트케이스 30번을 틀리게 된다.
- "조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다." 를 만족하지 않으면 테스트 케이스 22, 23 24, 29번을 틀리게 된다.
- return None , return (None) 등을 했다가 틀려서 봤더니 return "(None)" 을 했어야 했다.(생각해보면 당연)
3. 코드
# '#' 이 들어간 경우 문자열을 소문자로 바꿔주었다.(재생시간에 따른 멜로디, 멜로디 포함여부 등 처리를 위함)
def convert_melody(melody) :
s = ''
for i in range(len(melody)) :
if melody[i] == '#' :
s = s[:-1] + s[-1].lower()
else :
s += melody[i]
return s
def solution(m, musicinfos):
infos = []
m = convert_melody(m)
for music in musicinfos:
infos.append(music.split(","))
infos[-1][-1] = convert_melody(infos[-1][-1])
# 각 노래별 재생시간동안 재생된 멜로디를 note로 저장해주었다. 여러 후보곡 처리를 위해 재생시간, 순서 등 기록)
music_list = []
for idx, info in enumerate(infos) :
note = ''
start = int(info[0].split(":")[0]) * 60 + int(info[0].split(":")[1])
end = int(info[1].split(":")[0]) * 60 + int(info[1].split(":")[1])
for i in range(end - start) :
note += info[-1][i % len(info[-1])]
music_list.append([end-start, idx, info[2], note])
# 후보곡 중 재생시간을 내림차순으로, 입력 순서를 오름차순으로 정렬한다.
cand = []
for song in music_list :
if m in song[3] :
cand.append(song)
cand.sort(key = lambda x : (-x[0], x[1]))
# 문제 조건에 의한 노래제목 반환
if not cand :
return "(None)"
else :
return cand[0][2]
'알고리즘 > 프로그래머스' 카테고리의 다른 글
2018 KAKAO BLIND RECRUITMENT- 파일명 정렬, 파이썬 (0) | 2021.03.09 |
---|---|
2018 KAKAO BLIND RECRUITMENT - 압축, 파이썬 (0) | 2021.03.09 |
2018 KAKAO BLIND RECRUITMENT[1차] 다트 게임 (0) | 2021.03.08 |
2018 KAKAO BLIND RECRUITMENT- 비밀지도, 파이썬 (0) | 2021.03.07 |
2018 KAKAO BLIND RECRUITMENT - 캐시, 파이썬 (0) | 2021.03.07 |