アルゴリズム/プログラマー/2018 KAKAO BLIND RECRUIMENT/level 2/さっきの歌(Python付き)
9925 ワード
📖 質問する
📝 解法
m
の'#'
の音をすべて小文字に変換する.(関数replace_pound()
)<-文字列チェックを容易にするため!musicinfos
を巡回する2-1. 音楽情報の
'#'
音をすべて小文字に変換し、文字列チェックを容易にします.2-2. その音楽を再生する時間を求める.(関数
time_calc()
)2-2. 再生長が音楽長より大きい場合は、音楽を繰り返し再生します(対応する音楽の音階を接続し、再生長を超えます).あるいは、そのまま置いておきます.
2-3. 音楽の長さは再生の長さと同じです.
2-4. 2−3までに求めた再生音楽のうち
m
があることを確認すれば正解リストに入る.この時の正解は最小ヒップホップです!なぜ正解リストを記入するときに
[-play_time, cnt, title]
を選択したのかパスワード import heapq
# 음악이 재생된 시간을 계산해주는 함수
def time_calc(start, end):
hour = int(end[:2]) - int(start[:2])
if hour != 0:
return 60*hour + int(end[3:]) - int(start[3:])
else:
return int(end[3:]) - int(start[3:])
# '#'이 붙은 알파벳을 소문자로 변환해주는 함수
def replace_pound(note):
while '#' in note:
i = note.find('#')
if note[i] == '#':
note = note.replace(note[i-1:i+1], note[i-1].lower())
return note
def solution(m, musicinfos):
answer = []
m = replace_pound(m)
cnt = 0 # 음악이 입력된 순서를 알 수 있는 변수
for musicinfo in musicinfos:
musicinfo = musicinfo.split(',')
start, end = musicinfo[0], musicinfo[1]
title = musicinfo[2]
note = musicinfo[3]
note = replace_pound(note)
play_time = time_calc(start, end)
# 2-2. 음악 길이보다 재생 길이가 길면 음악을 반복해서 재생
if len(note) < play_time:
note *= (play_time // len(note) + 1)
# 2-3. 음악 길이를 재생 길이만큼 자른다.
note = note[:play_time]
# 2-4. 재생된 음악 안에 m이 있다면 정답 리스트에 넣는다.
if m in note:
heapq.heappush(answer,[-play_time, cnt, title])
cnt += 1
if answer:
return heapq.heappop(answer)[2]
else:
return '(None)'
😊 に感銘を与える
C#、D#などの「#」の音階をどう処理すればいいか分からなかった.
しかし、このように一度に処理する文字をreplace()
の方法に変換すればよい
Reference
この問題について(アルゴリズム/プログラマー/2018 KAKAO BLIND RECRUIMENT/level 2/さっきの歌(Python付き)), 我々は、より多くの情報をここで見つけました
https://velog.io/@yellowsummer/Algorithmprogrammers2018-KAKAO-BLIND-RECRUITMENTlevel2-방금-그곡with-python
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import heapq
# 음악이 재생된 시간을 계산해주는 함수
def time_calc(start, end):
hour = int(end[:2]) - int(start[:2])
if hour != 0:
return 60*hour + int(end[3:]) - int(start[3:])
else:
return int(end[3:]) - int(start[3:])
# '#'이 붙은 알파벳을 소문자로 변환해주는 함수
def replace_pound(note):
while '#' in note:
i = note.find('#')
if note[i] == '#':
note = note.replace(note[i-1:i+1], note[i-1].lower())
return note
def solution(m, musicinfos):
answer = []
m = replace_pound(m)
cnt = 0 # 음악이 입력된 순서를 알 수 있는 변수
for musicinfo in musicinfos:
musicinfo = musicinfo.split(',')
start, end = musicinfo[0], musicinfo[1]
title = musicinfo[2]
note = musicinfo[3]
note = replace_pound(note)
play_time = time_calc(start, end)
# 2-2. 음악 길이보다 재생 길이가 길면 음악을 반복해서 재생
if len(note) < play_time:
note *= (play_time // len(note) + 1)
# 2-3. 음악 길이를 재생 길이만큼 자른다.
note = note[:play_time]
# 2-4. 재생된 음악 안에 m이 있다면 정답 리스트에 넣는다.
if m in note:
heapq.heappush(answer,[-play_time, cnt, title])
cnt += 1
if answer:
return heapq.heappop(answer)[2]
else:
return '(None)'
C#、D#などの「#」の音階をどう処理すればいいか分からなかった.
しかし、このように一度に処理する文字を
replace()
の方法に変換すればよいReference
この問題について(アルゴリズム/プログラマー/2018 KAKAO BLIND RECRUIMENT/level 2/さっきの歌(Python付き)), 我々は、より多くの情報をここで見つけました https://velog.io/@yellowsummer/Algorithmprogrammers2018-KAKAO-BLIND-RECRUITMENTlevel2-방금-그곡with-pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol