방금 그 곡

lim1313·2021년 10월 14일
0

문제

방금그곡


풀이

function solution(melody, musicinfos) {
  let infos = musicinfos.map((v) => v.split(','));
  let fullMusic = [];
  let long = 0;

  let pattern = /[A-Z]#/g;

  melody = melody.replace(pattern, (v) => v.slice(0, 1).toLowerCase());

  for (let i = 0; i < infos.length; i++) {
    let [str, end, song, tune] = [...infos[i]];

    tune = tune.replace(pattern, (v) => v.slice(0, 1).toLowerCase());

    let h = str.slice(0, 2) - end.slice(0, 2) - 1;
    let m = str.slice(3) - end.slice(3) + 60;
    let wholeM = Math.abs(60 * h + m);

    let allRe = Math.floor(wholeM / tune.length);
    let eachRe = wholeM % tune.length;

    let allTune = tune.repeat(allRe) + tune.slice(0, eachRe);

    if (allTune.includes(melody)) {
      fullMusic.push([wholeM, song]);
      if (long <= wholeM) long = wholeM;
    }
  }

  if (!fullMusic.length) return '(None)';

  for (let k = 0; k < fullMusic.length; k++) {
    if (long === fullMusic[k][0]) return fullMusic[k][1];
  }
}

방금그곡 테스트 케이스

< 생각하지 못했던 테스트 케이스 >

  1. C#D#F# 이라면 악보의 길이는 3이다.
  2. 시작의 분보다 끝나는 분이 작을 경우를 생각하고 코드를 작성!(13:20 , 14:00 )
  3. #이 있는 경우를 판별할 때 abc#abc의 경우를 생각해 봐야한다. 즉 #이 있는 경우, 없는 경우 모두 존재할때가 있다.

profile
start coding

0개의 댓글