function solution(m,musicinfos) {
m = m.replace(/(\w)#/g,(_,p) => p.toLowerCase())
musicinfos = musicinfos.map(e => e.split(','))
let musicInfo = musicinfos.map(e=> {
e[3] = e[3].replace(/(\w)#/g,(_,p) => p.toLowerCase())
let playMin = toMin(e[1]) - toMin(e[0]);
let playMelody = toMelody(playMin,e[3]);
return [e[2], playMelody]
})
let answer = musicInfo.reduce((acc,e) => {
if(e[1].includes(m)) {
if(acc.length == 0 || acc[1].length < e[1].length) return e
}
return acc
},[])
return answer.length ? answer[0] : '(None)'
}
function toMin(time) {
time = time.split(':');
return time[0] * 60 + time[1] * 1;
}
function toMelody(min,melody) {
return melody.repeat(min / melody.length) + melody.substr(0,min % melody.length);
}
핵심
재생된 시간동안의 멜로디를 구해 문자열 m이 포함되어 있는지 체크할 수 있다.
이때 #이 있는 경우 인덱스를 +1 더 차지하므로 계산을 용이하게 하기 위해 #이 붙은 문자들은 #과함께 소문자로 대체한다.