일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 프로그래머스
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- java #자바
- java #자바 #동빈나
- 투포인터
- DFS
- 코딩테스트
- java #자바 #나동빈
- 백준
- 파이썬 #백준 #알고리즘 #코딩테스트
- java #자바 #생활코딩
- PYTHON
- 파이썬
- 백트랙킹
- 다익스트라
- dp
- 다이나믹프로그래밍
- Dijkstra
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- css #웹 #생활코딩
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 백준 #알고리즘 #파이썬 #코딩테스트
- react #리액트 #동빈나
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 자바 #java
- 백준 #파이썬 #알고리즘 #코딩테스트
- 알고리즘
- BFS
- css #생활코딩 #웹
- 재귀
Archives
- Today
- Total
커리까지
[프로그래머스] 2018 카카오 블라인드 3차 방금그곡 파이썬 본문
728x90
SMALL
입출력 예시
m | musicinfos | answer |
---|---|---|
"ABCDEFG" | ["12:00,12:14,HELLO,CDEFGAB", "13:00,13:05,WORLD,ABCDEF"] | "HELLO" |
"CC#BCC#BCC#BCC#B" | ["03:00,03:30,FOO,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"] | "FOO" |
"ABC" | ["12:00,12:14,HELLO,C#DEFGAB", "13:00,13:05,WORLD,ABCDEF"] | "WORLD" |
설명
첫 번째 예시에서 HELLO는 길이가 7분이지만 12:00부터 12:14까지 재생되었으므로 실제로 CDEFGABCDEFGAB로 재생되었고, 이 중에 기억한 멜로디인 ABCDEFG가 들어있다.
세 번째 예시에서 HELLO는 C#DEFGABC#DEFGAB로, WORLD는 ABCDE로 재생되었다. HELLO 안에 있는 ABC#은 기억한 멜로디인 ABC와 일치하지 않고, WORLD 안에 있는 ABC가 기억한 멜로디와 일치한다.
제출답안
import datetime
def play_time(infomation):
end_time = datetime.datetime.strptime(infomation[1], '%H:%M')
start_time = datetime.datetime.strptime(infomation[0], '%H:%M')
play_hour = str(end_time - start_time).split(':')
replay_time = int(play_hour[0]) * 60 + int(play_hour[1])
return replay_time
def vs(song, timeleng):
if timeleng <= len(song):
song = song[:timeleng]
else:
multi, plus = divmod(timeleng, len(song))
song = song * multi + song[:plus]
return song
def solution(m, musicinfos):
before = []
answer = []
ma = -1
m = m.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a').replace("E#",
'e')
for i in musicinfos:
infomation = i.split(',')
replay_time = play_time(infomation)
play_song = infomation[3].replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace(
'A#', 'a').replace("E#", 'e')
code = vs(play_song, replay_time)
before.append([replay_time, infomation[2], code])
for i in before:
if m in i[2]:
ma = max(ma, i[0])
answer.append(i)
if len(answer) == 0:
return '(None)'
else:
for i in range(len(answer)):
if ma == answer[i][0]:
return answer[i][1]
- 우선 시간을 구해야 했기 때문에 datetime을 써서 시작시간과 끝시간의 차이를 구하고 분은 그대로 가져가고 시간은 시간 * 60해서 분으로 만들어서 분을 반환하는 함수를 만들었다.
- 그 다음에는 재생시간과 음악의 길이를 구해야했기 때문에 그것을 실행하는 함수를 만들었다.
- 악보정보와 재생 시간을 비교하여 다른 song을 저장했다. 악보정보가 짧으면 위에서 구했던 분으로 몫과 나머지를 구해서 음악정보를 완성했다.
- #이 들어간 계이름들은 #을 없애주었다.
- 그리고 문자열을 ,로 파싱해서 각각의 정보로 나누었고 위에서 만들었던 함수에 대입하여 값을 반환하였다.
- 리스트에 필요한 정보만 담았다.
- m이 음악정보에 있으면서 문제 조건에 있는 재생 시간이 가장 긴 것들만 추려서 다시 리스트에 담았다.
- 만약 answer에 값이 없으면 none를 값이 있을때 재생시간이 최댓값과 같으면서 제일 처음에 들어온 노래를 출력한다.
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[백준] 1916번 최소비용 구하기 파이썬 (0) | 2021.05.27 |
---|---|
[프로그래머스] 2018 카카오 3차 압축 (0) | 2021.05.23 |
[백준] 1780번 종이의 개수 파이썬 (0) | 2021.05.05 |
[프로그래머스] 2020 카카오 인턴십 수식 최대화 파이썬 (0) | 2021.05.02 |
[백준] 4889번 안정적인 문자열 파이썬 (0) | 2021.04.29 |
Comments