[프로그래머스] [3차] 방금그곡 (JS)

hhkim·2023년 10월 20일
0

Algorithm - JavaScript

목록 보기
161/188
post-thumbnail

풀이 과정

  1. 각 음악에 대해 반복
  2. , 기준으로 문자열 나누기
  3. 음악의 길이(문자열의 길이) 구하기
  4. 재생 시간만큼 문자열 이어붙이기
    #이 들어간 문자는 다른 문자로 바꾸기
  5. 4번에 m이 포함되어 있으면 정답 후보: includes()
    현재 음악의 재생 시간이 이전에 저장된 값보다 크면 결과 갱신
  6. 결과가 없으면 (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 함수의 두 번째 인자로 함수를 넘길 수 있다는 것을 처음 알게 되었다.
원래 객체로 매핑해서 수동으로 치환을 해주었다가, 다른 사람의 풀이를 보고 수정했다.

0개의 댓글