[프로그래머스] 방금 그 곡 (JavaScript)

김예지·2021년 12월 8일
0
post-custom-banner

문제 링크 : 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"])); 
//맨 마지막으로 예외처리한 테스트케이스.
  • 기준 되는 곡을 여러번 반복 후 indexOf를 통해 검색
  • 문제를 꼼꼼히 읽지 않으면 여러 예외처리의 늪에서 헤매게 된다 ㅜㅜ
profile
새싹
post-custom-banner

0개의 댓글