반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- VUE
- 리트코드
- Medium
- LeetCode
- CS
- 배열
- 파이썬
- 백준
- 프로그래머스
- Level3
- 리액트
- C++
- 자바스크립트
- javascript
- 코테연습
- 웹프로그래밍
- dp
- Level2
- 프로그래밍
- python
- 동적계획법
- Doitvue.js입문
- typescript
- 고득점Kit
- react
- Level1
- sql
- OS
- 카카오
- web
Archives
- Today
- Total
[프로그래머스] 방금그곡 - python 본문
반응형
방금그곡
문제
네오는 기억한 멜로디를 재생 시간과 제공된 악보를 직접 보면서 비교하려고 한다. 다음과 같은 가정을 할 때 네오가 찾으려는 음악의 제목을 구하여라.
- 방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
- 네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
- 각 음은 1분에 1개씩 재생된다. 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다.
- 음악이 00:00를 넘겨서까지 재생되는 일은 없다.
- 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
- 조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다.
조건과 일치하는 음악 제목을 출력해라
제한사항
- 캐시 크기(cacheSize)와 도시이름 배열(cities)을 입력받는다.
- cacheSize는 정수이며, 범위는 0 ≦ cacheSize ≦ 30 이다.
- cities는 도시 이름으로 이뤄진 문자열 배열로, 최대 도시 수는 100,000개이다.
- 각 도시 이름은 공백, 숫자, 특수문자 등이 없는 영문자로 구성되며, 대소문자 구분을 하지 않는다. 도시 이름은 최대 20자로 이루어져 있다.
- 입력된 도시이름 배열을 순서대로 처리할 때, "총 실행시간"을 출력한다.
조건
- 입력으로 네오가 기억한 멜로디를 담은 문자열 m과 방송된 곡의 정보를 담고 있는 배열 musicinfos가 주어진다.
- m은 음 1개 이상 1439개 이하로 구성되어 있다.
- musicinfos는 100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ','로 구분된 문자열이다.
- 음악의 시작 시각과 끝난 시각은 24시간 HH:MM 형식이다.
- 음악 제목은 ',' 이외의 출력 가능한 문자로 표현된 길이 1 이상 64 이하의 문자열이다.
- 악보 정보는 음 1개 이상 1439개 이하로 구성되어 있다.
풀이
시간을 계산해서 몫 * 원본 + 원본[:나머지] 만큼 이어 붙인다. #붙은 두 글자는 다른 한 글자로 대체하면 편할 것 같아서 숫자로 대체했다.
0: A#
1: C#
2: D#
3: F#
4: G #
생각 못했던 예외 케이스는 끝나는 시간의 분이 00일 때였다.
12: 59 , 13:00 일 때 차이는 1이어야 했다. 그래서 start_time과 end_time를 각각 구해서 빼줬다.
import re
def replace_shap(m): # 샵 붙은 음 바꾸기
shap = ['A#', 'B#', 'C#', 'D#', 'F#', 'G#']
for i in range(len(shap)):
m = re.sub(shap[i], str(i), m)
return m
def solution(m, musicinfos):
answer = []
m = replace_shap(m)
for i, info in enumerate(musicinfos):
start, end, title, melody = info.split(",")
melody = replace_shap(melody)# 샵 붙은 음 바꾸기
h1, m1 = start.split(":")
h2, m2 = end.split(":")
start_time = int(h1) * 60 + int(m1)
end_time = int(h2) * 60 + int(m2)
period = end_time - start_time
melody = melody * (period // len(melody)) + melody[:period % len(melody)]
if m in melody:
answer.append((period, i, title))
if answer: # 재생 길이 내림차순, 인덱스 오름차순으로 정렬
return sorted(answer, key=lambda x:(-x[0], x[1]))[0][2]
return "(None)"
반응형
'코테 문제 풀이' 카테고리의 다른 글
[프로그래머스] 파일명 정렬 - python (0) | 2022.04.21 |
---|---|
[프로그래머스] 압축 - python (0) | 2022.04.21 |
[프로그래머스] 캐시 - python (0) | 2022.04.20 |
[프로그래머스] 프렌즈4블록 - python (0) | 2022.04.20 |
[프로그래머스] 후보키 - python (0) | 2022.04.18 |
Comments