ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스/javascript] [3차] 방금 그곡
    코딩테스트 2023. 4. 30. 15:37
    function solution(m, musicinfos) {
        let musicArr = musicinfos.map((el)=>el.split(','))
        //musicinfos를 조건 별로 나눠준다.
        let musicScale  = [];
        //music의 음을 재생된 시간에 맞춰서 넣어줄 배열이다.
        let answer =[];
        for(let i=0;i<musicinfos.length;i++){
            musicScale.push([musicArr[i][2]])
            //일단 music의 이름을 넣어준다.
            let hours = Number(musicinfos[i].slice(6,8))-Number(musicinfos[i].slice(0,2))
            let minutes = Number(musicinfos[i].slice(9,11))-Number(musicinfos[i].slice(3,5))
            let time = hours*60+minutes
            musicScale[i].push(time)
            // 재생 시간을 계산하여 넣어준다,
            let musics = musicArr[i][3].split('')
            for(let j=0;j<musics.length;j++){
                if(musics[j]==='#'){
                    musics[j-1] = musics[j-1].toLowerCase();
                }
            }
            musics = musics.filter((el)=>(el!=='#'))
                //#이 붙은 음의 경우는 소문자로 바꿔주고, #은 없애준다.
            if(time<=musics.length){
                musicScale[i].push(musics.slice(0,time).join(''))
                // 재생 시간이 음의 길이보다 짧은 경우는 그만큼 잘라서 넣어주고
            }else{
                let repeatedNum = Math.floor(time/musics.length)
                let rest = time%musics.length
                let newMusics = musics.join('').repeat(repeatedNum)
                newMusics+=musics.slice(0,rest).join('')
                musicScale[i].push(newMusics)
                // 긴 경우는 그만큼 반복해서 넣어준다.
            }
        }
        m=m.split('')
        for(let i=0;i<m.length;i++){
            if(m[i]==='#'){
                m[i-1] = m[i-1].toLowerCase()
                }
        }
        m = m.filter((el)=>(el!=='#')).join('')
        //m도 #이 붙어있는 것은 소문자로 바꾸는 작업을 해준다.
        let max = 0;
        for(let i=0;i<musicScale.length;i++){
            if(musicScale[i][2].includes(m)){
                max = Math.max(musicScale[i][1],max)
                answer.push(musicScale[i])
            }
            //answer에 m을 포함하는 애들만 골라서 넣어주고, answer가 2개 이상인 경우를 대비하여 max도 구해준다.
        }
        if(answer.length===0) return "(None)" //answer가 없다면 none을 반환한다.
        if(answer.length===1) return answer[0][0] //1개라면 이름을 그대로 반환한다.
        else{
            answer = answer.filter((el)=>el[1]===max)
            return answer[0][0] // 여러개가 있다면 max와 같은 애들만 찾아서, 그중의 첫번째 값을 반환한다.
        }
    }
Designed by Tistory.