1. 문제 설명


2. 입력 형식

입력으로 네오가 기억한 멜로디를 담은 문자열 m과 방송된 곡의 정보를 담고 있는 배열 musicinfos가 주어진다.

3. 출력 형식

조건과 일치하는 음악 제목을 출력한다.


4. 입출력 예제

let output = solution("ABCDEFG", ["12:00,12:14,HELLO,CDEFGAB", "13:00,13:05,WORLD,ABCDEF"]);
console.log(output); // "HELLO"

output = solution("CC#BCC#BCC#BCC#B", ["03:00,03:30,FOO,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"]);
console.log(output); // "FOO"
output = solution("ABC", ["12:00,12:14,HELLO,C#DEFGAB", "13:00,13:05,WORLD,ABCDEF"]);
console.log(output); // "WORLD"	

5. 설명


6. 문제 풀이

function solution(m, musicinfos) {
    const musicList = [];
    while (musicinfos.length > 0) {
        const currInfo = musicinfos.shift();
        const numbers = currInfo.match(/[0-9]+/g);
        const strings = currInfo.split(',').slice(2);
        
        let playHour = numbers[2] - numbers[0];
        let playTime = numbers[3] - numbers[1];
        if (playHour !== 0) playTime += playHour * 60;
        
        let sheet = strings[1].replace(/[A-Z]#/g, char => {
            return char[0].toLowerCase();
        });
        let share = parseInt(playTime / sheet.length);
        let rest = playTime % sheet.length;
        sheet = sheet.repeat(share) + sheet.slice(0, rest);
        
        let newM = m.replace(/[A-Z]#/g, char => {
            return char[0].toLowerCase();
        });
        if (sheet.includes(newM)) {
            musicList.push([playTime, strings[0]]);
        }
    } 
    
    if (musicList.length === 0) return '(None)';
    const result = musicList.sort((a, b) => b[0] - a[0]);
    return result[0][1];
}