2018 KAKAO BLIND RECRUITMENT - [1차] 셔틀버스

08.10에 푼 문제입니다🌷
[1차] 셔틀버스

풀이법

  1. 버스 시간표를 분단위로 bustime에 push한다.
  2. 크루들도 분단위로 바꾸고 정렬한다.
  3. 콘은 마지막 버스를 탈 것이므로, 앞에 있는 버스들에 탈 크루들을 배열에서 뺀다.
  4. 마지막 버스에 탈 수 있는 수만큼 크루들을 남긴다.
  5. 콘을 더한 모든 크루들이 마지막 버스를 탈 수 있으면 콘은 마지막 버스 출발시간에 와도 된다.
  6. 콘을 타면 정원 초과가 되는 버스는 마지막에 타는 크루보다 1분 먼저오면 탈 수 있다.
  7. 마지막 버스시간보다 늦은 크루는 탈 수 없으므로 콘은 마지막 버스 시간에 오면 된다.

코드

function solution(n, t, m, timetable) {
    var answer = '';
    const bustime=[]
    let crews = []
    let time = 9*60
    // 1.
    for(let i=0;i<n;i++){
        bustime.push(time)
        time+=t
    }
    // 2.
    timetable.map(t=>{
        t=t.split(':')
        t=parseInt(t[0])*60+parseInt(t[1])
        crews.push(t)
    })
    // 3.
    crews.sort((a,b)=>a-b)
    
    for(let i=0;i<bustime.length-1;i++){
        let people = 0
        while(crews[0]<=bustime[i]&&people<m){
            people++
            crews.shift()
        }
    }
    
    let lastbus = bustime.pop()
    // 4.
    crews=crews.slice(0,m)
    
    // 5.
    if(crews.length<m){
        answer=lastbus
    }
    else{ 
        let lastcrew = crews.pop()
        // 6.
        if(lastcrew<=lastbus){
            answer = lastcrew-1
        }
        else{
        // 7.
            answer= lastbus
        }
    }
    
    
    return String(Math.floor(answer/60)).padStart(2,'0')+':'+String(answer%60,2).padStart(2,'0')
}

좋은 웹페이지 즐겨찾기