[プログラマー]さっきの歌
14135 ワード
問題の説明
ラジオをよく聴くニオは、ラジオから出たばかりの音楽がどんな音楽なのかよく知りたい.この時、ニオは次のポータルサイトの「さっきの歌」サービスをよく利用した.さっきの歌はテレビやラジオなどの音楽のテーマなどの情報を提供するサービスでした.
ニオは自分の覚えているメロディーを持って、さっきの歌で音楽を探していました.しかし、放送中に1曲の音楽を繰り返し再生する場合もあり、ニオの記憶の中のメロディーは、音楽の終わり部分と冒頭部分から続くメロディーかもしれない.逆に、途中で音楽を中断すると、原曲にニオの記憶のメロディーがあっても、ニオが聞いたことのない曲ではない可能性があります.そこで、ニオは記憶の中のメロディーを再生時間と提供された楽譜と比較したいと思っています.以下の仮定をすると、ニオが探している音楽のテーマを求めます.
(None)
」を返します.入力フォーマット
ニオの記憶のメロディーを入力として含む文字列.
m
と再生された曲の情報リスト musicinfos
が与えられる.m
銀音 1
以上 1439
以下で構成されています.musicinfos
100
個以下の歌曲情報の配列を含み、各歌曲情報は、音楽開始時刻、終了時刻、音楽タイトル、楽譜情報「,
」からなる.HH:MM
形式.,
」以外の出力可能文字です. 1
以上 64
次の文字列.1
以上 1439
以下で構成されています.出力フォーマット
条件を満たす音楽タイトルを出力します.
I/O例
説明:
第1の例では、HELLOの長さは7分であるが、12:00から12:14まで再生されるので、実際には記憶のメロディーABCDEFGを含むCDEFGABCDEFGABで再生される.第3の例では、HELLOはC#DEFGABC#DEFGABで再生され、WOLDはABCDEで再生される.HELLO中のABC#は記憶中のメロディーABCと一致せず、WORLD中のABC記憶中のメロディーと一致する.
首都コード
2-1. curmusicに音楽を加え、playTime-現在の音楽の長さを減算します.
2-2. プレイタイム設定に従って繰り返し文を設定し、curmusicの0番目のインデックスからcurmusicに貼り付けます.
2-3. ブラウズ中に音楽がcurmusicに含まれている場合、curmusic[i+1]が「#」でない場合は、すぐにタイトルに戻ります.
2-1. 現在探索中の音楽も同様であり,#があればピッチを小文字に変換する.
2-2. プレイタイムに対応した再生音楽を作成します.
2-3で再生される音楽には、あなたが聴く音楽が含まれています.
2-3-1. 答え[0]音楽を再生する長さが保存されているので、現在の音楽が長い場合は
2-3-2. 答え[0]音楽の長さを指定、答え[1]タイトルを指定
Solution
function solution(m, musicinfos) {
let answer = [0, '']
let music = '';
for (let i = 0; i < m.length; i++) {
if (m[i + 1] === '#') {
music += m[i].toLowerCase()
i++
} else {
music += m[i]
}
}
for (let i = 0; i < musicinfos.length; i++) {
let info = musicinfos[i].split(',')
let startTime = info[0].split(':')
let endTime = info[1].split(':')
let startMin = Number(startTime[0]) * 60 + Number(startTime[1])
let endMin = Number(endTime[0]) * 60 + Number(endTime[1])
let playTime = endMin - startMin
let curMusic = '';
for (let j = 0; j < info[3].length; j++) {
if (info[3][j + 1] === '#') {
curMusic += info[3][j].toLowerCase();
j++
} else {
curMusic += info[3][j]
}
}
if (playTime <= curMusic.length) curMusic = curMusic.slice(0, playTime)
else {
curMusic = curMusic.repeat(playTime / curMusic.length) + curMusic.slice(0, playTime % curMusic.length)
}
if (curMusic.split(music).join('').length !== curMusic.length) {
if (answer[0] < curMusic.length) {
answer[0] = curMusic.length
answer[1] = info[2]
}
}
}
return answer[0] ? answer[1] : '(None)'
}
GItHub repo
Reference
この問題について([プログラマー]さっきの歌), 我々は、より多くの情報をここで見つけました https://velog.io/@catalyst88/프로그래머스-방금그곡テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol