[프로그래머스] [1차] 셔틀버스

adultlee·2023년 6월 12일
0

프로그래머스 3단계

목록 보기
19/39

문제 링크

프로그래머스 문제

풀이

카카오에서 좋아하는 복잡한 문자열에 대한 처리이다.
다행스럽게도 JS에서는 문자열처리가 쉬운편이다.
따라서 시간에 관한 문자열들의 경우 내가 관리하기 편한 시간으로 먼저 정렬후 진행한다.
그후 자주 쓸것같은 함수들을 미리 구현한 후 풀이를 진행하면 어렵지 않게 풀수 있다.

코드

function solution(n, t, m, timetable) {
    var answer = '';
    
    let startTime = timeToMin("09:00");
    timetable = timetable.map(v => timeToMin(v)).sort( (a,b) => a-b)

    for(let i=0; i< n; i++){
        const curMember = getCurMember(startTime , timetable)
        
        if(i === n-1){ // 막차 일때
            if(curMember.length >= m){ // 다 탈수 있는 인원보다 기다리는 인원이 많은 경우
                answer = curMember[m-1] -1 // 탈 수 있었던 마지막 인원보다 1분 일찍 들어갑니다.
            }else{
                answer = startTime // 현재 시간을 반환합니다. 
            }
        }else{ // 막차가 아닌경우
            timetable.splice(0, curMember.length > m ? m : curMember.length)
            startTime += t
        }
        
    }
    
    return minTotime(answer);
}

function timeToMin(string){
    const [hour , min] = string.split(":")
    const time = hour*60 + min *1;
    return time
}
    
function getCurMember(curTime, curMembers ){ // number , array => array
    let curMember = []
    for(let i=0; i< curMembers.length; i++){
        if(curMembers[i] <= curTime){
            curMember.push(curMembers[i])
        }else{
            break;
        }
    }
    return curMember // 현재 탈 수 있는 인원들을 반환합니다. 
}

function minTotime(number){ // number => string , 0 => 00:00
    const hour = Math.floor(number/60) < 10 ? "0"+Math.floor(number/60) : ""+Math.floor(number/60);
    const min = Math.floor(number%60) < 10 ? "0" + Math.floor(number%60) : ""+Math.floor(number%60);
    
    const time = hour+":"+min
    return time
}




0개의 댓글