프로그래머스/lv.2
[3차] 방금그곡
bingual
2024. 3. 8. 01:11
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/17683
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
해당 문제는 2월 21일 자 기준으로 지문에 누락된 정보가 있다. 34번 테스트 케이스의 경우 조건을 전부 만족하는데도 실패가 뜨는데 치환 과정에서 B#을 추가해줘야 한다. 이는 지문에 적혀있지 않은 정보다.
- "#"이 들어간 문자열을 한 글자로 치환해주어야 하며 각 시간은 분 단위로 변환한다.
- 음악이 반복 재생되는 구간을 특정한 뒤 m이 그 구간에 포함되어 있다면 해당 곡이 정답이 된다.
- 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다
def solution(m, musicinfos):
answer = []
n = len(m)
m = replace(m)
for info in musicinfos:
start, end, title, song = info.split(",")
start, end, song = convert(start), convert(end), replace(song)
full_song = (song * ((end - start) // len(song) + 1))[: end - start]
if m in full_song:
answer.append((title, end - start))
if not answer:
return "(None)"
else:
return sorted(answer, key=lambda x: -x[1])[0][0]
def convert(time):
h, m = time.split(":")
return int(h) * 60 + int(m)
def replace(s):
return (
s.replace("C#", "c")
.replace("D#", "d")
.replace("F#", "f")
.replace("G#", "g")
.replace("A#", "a")
.replace("B#", "b")
)