풀이 과정
1. 시간을 분단위로 변환 / 정규 표현식 활용하여 악보를 요소 하나하나씩 담긴 리스트로 변환
2. 정렬(분단위로 변환하였으니 종료시간 - 시작시간으로 내림차순, 시작시간으로 오름차순)
3. m도 정규 표현식 활용하여 리스트 변환 / 순차적으로 접근하면서 비교
import re
def solution(m, musicinfos):
answer = ''
infos = []
# 시간 분단위로 변환
for musicinfo in musicinfos:
info = musicinfo.split(',')
stmin = 60 * int(info[0][0:2]) + int(info[0][3:5])
fimin = 60 * int(info[1][0:2]) + int(info[1][3:5])
title = re.findall('A#|C#|D#|F#|G#|[A|B|G|F|E|D|C]', info[3])
it = (fimin - stmin) // len(title)
k = (fimin - stmin) % len(title)
infos.append([stmin, fimin, info[2], title * it + title[:k]])
# 재생시간, 시작시간 순 정렬
infos.sort(key=lambda x:(-(x[1]-x[0]), x[0]))
m = re.findall('A#|C#|D#|F#|G#|[A|B|G|F|E|D|C]', m)
length = len(m)
# 문자열 비교 파트
for i in range(len(infos)):
for j in range(len(infos[i][3]) - length + 1):
count = 0
for k in range(len(m)):
if m[k] == infos[i][3][j+k]:
count += 1
if count == length:
answer = infos[i][2]
break
if answer != '':
break
if answer == '':
answer = '(None)'
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 올바른 괄호 (0) | 2021.07.05 |
---|---|
[ Lv 2 ] 땅따먹기 (0) | 2021.07.04 |
[ Lv 2 ] 피보나치 수 (0) | 2021.07.01 |
[ Lv 2 ] 방문 길이 (0) | 2021.06.30 |
[ Lv 2 ] 쿼드압축 후 개수 세기 (0) | 2021.06.30 |