문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17683
코딩테스트 연습 - [3차] 방금그곡
방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,
programmers.co.kr
풀이
- get_time : 재생된 시간 구하는 함수
- get_s : 음을 구분한 배열 구하는 함수
1. 음악 별로 시작 시간, 끝난 시간, 음악 제목, 악보 정보를 ','를 기준으로 잘라서 각 변수에 대입
2. 재생 시간 구하기 & 음을 구분한 배열을 구하고, 악보의 길이 구하기
3. 총 재생된 악보 구하기
4. 총 재생된 악보에서 m이 존재하는지 확인하고, 재생시간이 answer보다 길면 제목 갱신
def get_time(x, y):
x = int(x[:2]) * 60 + int(x[3:])
y = int(y[:2]) * 60 + int(y[3:])
return y-x
# 악보의 음을 구분한 배열 구하는 함수
def get_s(s):
result = []
for i in range(len(s)):
if s[i] == '#':
continue
# 마지막 음이 '#'이 아니면 삽입
if i == len(s)-1 :
result.append(s[i])
else :
# '#'와 함께 구성된 음이면
if s[i+1] == '#':
result.append(s[i:i+2])
else:
result.append(s[i])
return result
def solution(m, musicinfos):
# 정답 제목과 재생 시간
answer = ''
t_answer = 0
for music in musicinfos :
# ','을 기준으로 나누어서 각 변수에 대입
start, end, name, info = map(str,music.split(','))
# 재생 시간 구하기
t = get_time(start,end)
# 음 구분한 배열 구하기
result = get_s(info)
# 악보의 총 길이
l = len(result)
# 재생된 악보 저장할 배열
s = []
# 재생 기간에 악보 전체가 재생될 수 있는 수만큼 전체 악보 삽입
for _ in range(t//l):
s.extend(result)
# 나머지 악보 삽입
for i in range(t%l):
s.append(result[i])
# 기억한 멜로디의 재생 길이 구하기
m_l = len(get_s(m))
# 재생된 총 악보에 기억한 멜로디가 존재하는지 확인
for i in range(len(s)- m_l+1):
if m == "".join(s[i:i+m_l]):
# 총 재생기간이 긴 것으로 갱신
if t_answer < t:
answer= name
t_answer = t
# 일치하는 것이 없다면
if len(answer) == 0 :
return '(None)'
return answer
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level2] [1차] 프렌즈4블록 - python (0) | 2022.04.14 |
---|---|
[프로그래머스][level2] 조이스틱 - python (0) | 2022.04.11 |
[프로그래머스][level2] N개의 최소공배수 - python (0) | 2022.04.11 |
[프로그래머스][level2] 이진 변환 반복하기 - python (0) | 2022.04.11 |
[프로그래머스][level2] [1차] 뉴스 클러스터링 - python (0) | 2022.04.11 |