문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/17683?language=javascript
function solution(m, musicinfos) {
let ansLen = 0,
ans = "(None)";
m = m.replace(/(\D)#/g, (s, p1) => p1.toLowerCase());
//C#,D#등을 c,d로 치환한다. (C#을 C로 인식하고 노래를 찾는 일이 없도록)
for (let i = 0; i < musicinfos.length; i++) {
musicinfos[i] = musicinfos[i].split(",");
musicinfos[i][3] = musicinfos[i][3].replace(/(\D)#/g, (s, p1) =>
p1.toLowerCase()
);
let a, b, c, d;
[a, b] = musicinfos[i][0].split(":");
[c, d] = musicinfos[i][1].split(":");
let n = m.length / musicinfos[i][3].length + 1;
let temp = musicinfos[i][3].repeat(Math.ceil(n));
//찾는게 "CCCC"이고 노래가 "C"일 경우 노래 길이만큼은 반복이 되어야하기때문에 그렇게 처리해둠
let minutes = (c - a) * 60 + (d - b);
//노래 길이를 구해둔다
if (minutes < musicinfos[i][3].length) {
//음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다. 라고 언급된 부분 예외처리
temp = musicinfos[i][3].substring(0, minutes);
}
if (temp.indexOf(m) >= 0) {
//노래에서 찾는부분을 찾는 경우
if (ansLen < minutes) {
ansLen = minutes;
//나중에 또 찾는 곡이 있을 경우 곡의 길이로 비교하기위해 저장해둔다
ans = musicinfos[i][2];
}
}
}
return ans;
}
console.log(solution("DF", ["6:20,6:50,TEST,DDF"]));
//맨 마지막으로 예외처리한 테스트케이스.