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

Liam·2021년 12월 5일
0

알고리즘

목록 보기
1/2

프로그래머스-방금그곡(Javascirpt)-2018카카오공채

문제

https://programmers.co.kr/learn/courses/30/lessons/17683

문제 풀이

부분 문자열 비교를 묻는 문제이다. 멜로디의 각 음을 나타내는 글자는 한 글자 일수도 있고, 'C#'처럼 두글자일 수도 있다. 나는 멜로디의 문자열을 입력받아 각각의 음을 배열로 변환한 뒤에 비교를 수행했다.
ex) ["ABC#"] ==> ["A","B","C#"]
문자열 비교는 잘 했지만 문제 요구사항의 예외처리를 하나 누락하여 시간을 많이 잡아먹었다.
처음부터 코드를 잘 짜자 라는 것을 다시금 생각했다..나의 3시간....

function allTime(start, end) {
  let start_h = start.split(":")[0];
  let start_m = start.split(":")[1];
  let end_h = end.split(":")[0];
  let end_m = end.split(":")[1];

  return (end_h - start_h) * 60 + (end_m - start_m); //총 재생시간
}

function makeRecord(record) {
  let tmpRecord = record.split("");
  let newRecord = [];
  for (let i = 0; i < tmpRecord.length; i++) {
    if (tmpRecord[i] !== "#") {
      newRecord.push(tmpRecord[i]);
    } else {
      newRecord.pop();
      newRecord.push(`${tmpRecord[i - 1]}#`);
    }
  }
  return newRecord;
}

function makeAllPlayRecord(time, record) {
  let allRecord = [];

  for (let i = 0; i < time; i++) {
    allRecord.push(record[i % record.length]);
  }
  // console.log(allRecord);
  return allRecord;
}

function solution(m, musicinfos) {
  let startTime = [];
  let endTime = [];
  let musicName = [];
  let orgRecord = [];
  let allTimes = [];
  let allRecord = [];
  let mm = makeRecord(m);

  for (let i = 0; i < musicinfos.length; i++) {
    let splitMusicinfos = musicinfos[i].split(",");
    startTime[i] = splitMusicinfos[0];
    endTime[i] = splitMusicinfos[1];
    musicName[i] = splitMusicinfos[2];
    orgRecord[i] = makeRecord(splitMusicinfos[3]);
    allTimes[i] = allTime(startTime[i], endTime[i]);
    allRecord[i] = makeAllPlayRecord(allTimes[i], orgRecord[i]);
  }

  let music = "";
  let tmpTime = 0;

  for (let i = 0; i < musicinfos.length; i++) {
    for (let j = 0; j <(allRecord[i].length-(mm.length-1)); j++) {
      for (let k = 0; k < mm.length; k++) {
        if (allRecord[i][j + k] !== mm[k]) {
          break;
        }
        if (k === mm.length - 1) {
          if (!music) {
            music = musicName[i];
            tmpTime = allTimes[i];
          } else if (music) {
            if (allTimes[i] > tmpTime) {
              tmpTime = allTimes[i];
              music = musicName[i];
            }
          }
        }
      }
    }
  }
  if(!music) music = '(None)';    
  return music;
}
profile
🚀티끌모아 백엔드 개발자

0개의 댓글