-
[Python] programmers 방금 그곡알고리즘/카카오기출 2022. 2. 11. 15:17728x90
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17683
2. 문제 요약
- 방금 그 곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
- 네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
- 각 음은 1분에 1개씩 재생된다. 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다.
- 음악이 00:00을 넘겨서까지 재생되는 일은 없다.
- 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
- 조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다.
3. 아이디어 정리
- 곡 정보를 가공한다 - 음악이 흐른 시간만큼 곡을 만들어준다.
- #이 들어간 데이터인 경우 소문자로 대체 - 1글자로 만들어서 파악하기 쉽게 하기 위해
- 매칭 되는 것이 있는지 찾기 ⇒ python 문자열 찾기 사용
- 결과 찾기 - 재생된 시간이 제일 긴 음악 제목 > 먼저 입력된 음악 제목 ⇒ 정렬
4. 문제 풀이
4-1. 내 풀이
def solution(m, musicinfos): """ :param m: 네오가 기억한 멜로디 :param musicinfos: 곡의 정보가 담긴 배열 - 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보 :return: 조건과 일치하는 음악 제목 출력 """ def get_minute(str_): h, m_ = str_.split(':') return int(h) * 60 + int(m_) def replace(data): return data.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a') m = replace(m) answer = list() music = list() # 1. 곡 정보를 가공 for mus in musicinfos: s, e, n, d = mus.split(',') # 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보 total = get_minute(e) - get_minute(s) # 총 재생 시간 d = replace(d) if total >= len(d): data = d * (total // len(d)) + d[:(total % len(d))] else: # 작은 경우 자르기 data = d[:total] music.append((n, data)) # 이름, 음악이 흘러간 데이터 # 2. 매칭되는 것이 있는지 찾기 for i, d in enumerate(music): name, mus = d if len(m) > len(mus): # 찾는 곡이 더 긴 경우 그만 continue if mus.find(m) != -1: answer.append((i, len(mus), name)) # 3. 결과 찾기 - 재생된 시간이 제일 긴 음악 제목 > 먼저 입력된 음악 제목 if answer: answer.sort(key=lambda x: (-x[1], x[0])) answer = answer[0][2] else: answer = '(None)' return answer
5. 결론
- 구현 문제
'알고리즘 > 카카오기출' 카테고리의 다른 글
[Python] programmers 3차 압축 (0) 2022.02.11 [Python] programmers 양궁대회 (0) 2022.01.23 [Python] programmers k진수에서 소수 개수 구하기 (0) 2022.01.22 [Python] programmers 주차요금계산 (0) 2022.01.22 [Python] programmers 신고 결과 받기 (1) 2022.01.22