,
기준으로 문자열 나누기#
이 들어간 문자는 다른 문자로 바꾸기m
이 포함되어 있으면 정답 후보: includes()
(None)
반환function solution(m, musicinfos) {
let result = '';
let maxDuration = 0;
m = replaceSharp(m);
for (const music of musicinfos) {
const [s, e, title, orgMelody] = music.split(',');
const melody = replaceSharp(orgMelody);
const duration = getDuration(s, e);
const length = melody.length;
const played =
melody.repeat(Math.trunc(duration / length)) +
melody.slice(0, duration % length);
if (played.includes(m) && duration > maxDuration) {
result = title;
maxDuration = duration;
}
}
return result ? result : '(None)';
}
function replaceSharp(str) {
return str.replace(/\w#/g, (w) => w[0].toLowerCase());
}
function getDuration(s, e) {
const [sh, sm] = s.split(':').map(Number);
const [eh, em] = e.split(':').map(Number);
return eh * 60 + em - (sh * 60 + sm);
}
파싱만 잘 하면 어렵지 않은 문제였다.
replace
함수의 두 번째 인자로 함수를 넘길 수 있다는 것을 처음 알게 되었다.
원래 객체로 매핑해서 수동으로 치환을 해주었다가, 다른 사람의 풀이를 보고 수정했다.