[プログラマー]さっきの歌
https://programmers.co.kr/learn/courses/30/lessons/17683
使用するアルゴリズム/データ構造
問題で提起された条件はコードで表現される問題である.
#これらの付加コードと未付加コード(C#VS C)を区別するために、
メロディーを含む資料を(idx,minutes)形式で格納した.
それを問題提起の条件に合わせて組み合わせて正解を見つけた.
コード#コード#
C#の2文字コードを1文字として認識するには、arrayに分割し、個数に応じてコピーして文字列に再接続する必要があります.
そうするよりも、#に添付されたコードを1文字の何かに変換すると、コードが簡潔になります.
コードは大文字でしか与えられないので、#に貼り付けられたコードを小文字に変換できます.
改良されたコード
使用するアルゴリズム/データ構造
問題で提起された条件はコードで表現される問題である.
#これらの付加コードと未付加コード(C#VS C)を区別するために、
C# -> *C#
同じ形式に変更します.メロディーを含む資料を(idx,minutes)形式で格納した.
それを問題提起の条件に合わせて組み合わせて正解を見つけた.
コード#コード#
def solution(m, musicinfos):
my = ""
for i in range(len(m)):
if i+1 < len(m) and m[i+1] == '#':
my += "*"
my += m[i]
names, candidates = [], []
for i in range(len(musicinfos)):
info = musicinfos[i]
tmp = info.split(',')
names.append(tmp[2])
h1, m1 = map(int, tmp[0].split(":"))
h2, m2 = map(int, tmp[1].split(":"))
minutes = (h2 - h1) * 60 + m2 - m1
melodies = to_array(tmp[3])
full_melodies = ''.join(melodies * (minutes//len(melodies)) + melodies[:minutes%len(melodies)])
if my in full_melodies:
candidates.append((i, minutes))
if candidates:
candidates.sort(key=lambda x : -x[1])
return names[candidates[0][0]]
else:
return "(None)"
def to_array(m):
arr = []
for i in range(len(m)):
if m[i] == '#':
continue
elif i < len(m)-1 and m[i+1] == '#':
arr.append("*" + m[i:i+2])
else:
arr.append(m[i])
return arr
コード改善方向C#の2文字コードを1文字として認識するには、arrayに分割し、個数に応じてコピーして文字列に再接続する必要があります.
そうするよりも、#に添付されたコードを1文字の何かに変換すると、コードが簡潔になります.
コードは大文字でしか与えられないので、#に貼り付けられたコードを小文字に変換できます.
C# -> c, D# -> d, F# -> f, G# -> g, A# -> a
また、特定の値を1つだけ要求すればよいので、候補者にすべての資料を入れてソートするよりも、その時点で最適な年かどうかを確認したほうがいいです.改良されたコード
def solution(m, musicinfos):
m = transform(m)
answer = (0, '(None)')
for info in musicinfos:
tmp = info.split(',')
name = tmp[2]
h1, m1 = map(int, tmp[0].split(":"))
h2, m2 = map(int, tmp[1].split(":"))
minutes = (h2 - h1)*60 + m2 - m1
melodies = transform(tmp[3])
full_melodies = melodies * (minutes // len(melodies)) + melodies[:minutes % len(melodies)]
if m in full_melodies and minutes > answer[0]:
answer = (minutes, name)
return answer[1]
def transform(m):
return m.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a')
Reference
この問題について([プログラマー]さっきの歌), 我々は、より多くの情報をここで見つけました https://velog.io/@jadenkim5179/프로그래머스-방금-그-곡テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol