[프로그래머스] Lv2. 방금그곡- JavaScript

이상돈·2023년 4월 6일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 방금그곡

문제

제한사항

📌 내가 생각한 풀이

  1. C#, D#, F#, G#, A#과 같은 뒤에 #이 붙은 문자를 예외처리 하기위해, C#을 소문자c로 D#을 소문자d로,,, 이렇게 기존의 문자와 구분되는 문자로 치환해준다.
  2. new Date()객체를 이용하여 재생된 시간을 구하고, 그 구간에 나왔던 멜로디의 전체를 구한다.
  3. string.includes 메서드를 이용하여, 일치하는 문자열을 찾고, 문제조건에 주어진 두 가지 음악이 곂치는 경우 재생시간이 긴 음악의 제목을 뽑기위해, 제목과 재생시간을 함께 stack에 넣어준다.
  4. len === 1 이면 스택에 존재하는 음악이 답, len === 0이면, 존재하는 음악이 없으므로, "(None)"을 리턴, len >=2이상이면, 재생시간을 기준으로 sort한 다음 맨 첫번째것을 답으로 리턴하면 된다.
function solution(m, musicinfos) {
    var answer = '';
    let stack = [];
   m = m.replaceAll('C#','c').replaceAll('D#','d').replaceAll('F#','f').replaceAll('G#','g').replaceAll("A#",'a');
    for(var jj =0; jj<musicinfos.length; jj++){
        let value = musicinfos[jj].split(',');
        let index =0;
        let startTime = new Date(`2000-01-02 ${value[0]}:00`)
        let finishTime = new Date(`2000-01-02 ${value[1]}:00`);
        let title = value[2];
        let melody = value[3].replaceAll('C#','c').replaceAll('D#','d').replaceAll('F#','f').replaceAll('G#','g').replaceAll("A#",'a');
        let melodyLen = melody.length;
        let wholeMelody = "";
        let minute = (finishTime-startTime) / (60* 1000)
        let min = minute
        while(minute !== 0){
            if(index < melodyLen){
                wholeMelody+=melody[index];
                index++
                minute--;
            }else{
                index =0;
            }
        }
        let key = m;
        if(wholeMelody.includes(m)){
            stack.push([title, min])
        }
    }
    if(stack.length === 1){
        return answer = stack[0][0]
    }else if(stack.length > 1){
        stack.sort((a,b)=>a[1] > b[1] ? 1 : -1)
        return answer = stack.pop()[0]
    }else{
        return answer ='(None)'
    }
}

📌 느낀점

어떻게 #이 붙은 문자를 처리하여야 할까 엄청 고민했었다. 30분정도 고민하다가, replaceAll을 이용하여, 다른문자와 구분되는 한글자 문자로 치환하면 된다고 생각이 나서 풀었다. 최대한 쉽게 풀 수 있도록 생각하는 버릇을 길러야겠다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글