공부/알고리즘&자료구조

프로그래머스 카카오 2018 3차 방금그곡

youngble 2021. 12. 5. 18:32

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

 

코딩테스트 연습 - [3차] 방금그곡

방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,

programmers.co.kr

내가푼방식

function solution(m, musicinfos) {
    var answer=[];
    
    var numb=[]; 
    for(var i=0; i< musicinfos.length; i++){
    var b= musicinfos[i].split(",");
    var totalmusicplay=0;
    var end= (b[1].substr(0,2)/1)*60 +(b[1].substr(3,2)/1);
    var start= (b[0].substr(0,2)/1)*60 +(b[0].substr(3,2)/1);
    
    var playinghour = end-start
    
    var hour = 0;
    var min =0;
    var playingpart='' ;
    var leftpart=0;
    var playingleftpart='';
    
    
    
    hour = Math.floor(playinghour/60); 
    min = playinghour%60; 
    totalmusicplay = 60*hour+min
    
    if(b[3].match(/[A-Z]#/gi)!==-1){
        b[3] = b[3].replace(/C#/gi, "c");
        b[3]= b[3].replace(/D#/gi, "d");
       b[3] = b[3].replace(/F#/gi, "f");
       b[3] = b[3].replace(/G#/gi, "g");
        b[3] = b[3].replace(/A#/gi, "a");
    
    }
    if(m.match(/[A-Z]#/gi)!==-1){
        m = m.replace(/C#/gi, "c");
        m= m.replace(/D#/gi, "d");
       m = m.replace(/F#/gi, "f");
       m = m.replace(/G#/gi, "g");
       m = m.replace(/A#/gi, "a");
    
    }
    
    playingpart = b[3].substr(0,totalmusicplay)
    
     leftpart = totalmusicplay - b[3].length
    
    while(leftpart>0){
        playingleftpart=b[3].substr(0,leftpart)
        playingpart+=playingleftpart;
        leftpart= leftpart-b[3].length;
    }
    
    let reg = new RegExp(`${m}`,"g")
    console.log(reg)
    if(playingpart.match(reg)!==null)
    { 
        answer.push([b[2], totalmusicplay]);
        numb.push(totalmusicplay)
    
    }
    if(i===musicinfos.length-1){
        if(answer.length>1 ){
             return  answer[numb.indexOf(Math.max(...numb))][0]
    
        } else if(answer.length===1 ) {
            return answer[0][0];
        }
    
        return "(None)";
    }
    }
    }

접근방법

자바스크립트의 내장함수를 이용하여 배열과 문자열을 정수로 바꿔주는 법을 생각해보았고, 

음에 해당하는 #부분을 정규식을 이용하여 소문자 로바꿔주었다. 이는 match 를할시 #까지 포함해서 안읽기때문에 앞에가 다맞으면 #이 있어야 맞는부분도 다 맞다고 된다. 따라서 #이붙은 값은 고유의 값 하나로 묶어야함으로 해당하는 정규식이 #을 가질때 replace로 소문자 하나로 바꾸어주었다.

 

코드풀이