코딩테스트 문제풀이/프로그래머스

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

itaeiou 2022. 3. 17. 15:18
반응형

17678 셔틀버스

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

 

코딩테스트 연습 - [1차] 셔틀버스

10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"

programmers.co.kr

 

20220317 javascript 풀이

function solution(n, t, m, timetable) {
    let time = timetable.sort().map(vt => vt.split(':').map(vn => parseInt(vn)) )
    
    let hour = 9, minute = 0;
    for(let k=0; k<n-1; k++) {
        time = time.filter((v, i) => ( i>=m || timeComp(v, [hour, minute]) ));
        
        hour += Math.floor((minute+t) / 60);
        minute = (minute+t) % 60;
    }
    
    if(time.length < m) {
        return printTime(hour, minute);
    }
    else if(timeComp(time[m-1], [hour, minute])) {
        return printTime(hour, minute);
    } else {
        hour = time[m-1][0];
        minute = time[m-1][1] - 1;
        if(minute < 0) {
            hour -= 1;
            minute += 60;
        }
        
        return printTime(hour, minute);
    }
}

// t1이 크면 true
// 같으면 true
// t2가 크면 false
const timeComp = (t1, t2) => {
    if(t1[0] > t2[0]) return true;
    else if(t1[0] == t2[0] && t1[1] > t2[1]) return true;
    else false;
}

const printTime = (hour, minute) => {
    let printH = hour < 10 ? `0${hour}` : hour;
    let printM = minute < 10 ? `0${minute}` : minute;
    return `${printH}:${printM}`;
}

단순 구현으로 풀었던 문제

timetable을 정렬하고, 버스에 타지 못한 사람만 남긴다.

마지막 셔틀버스에 남은 사람만 비교해서

모두 탈 수 있으면 버스 도착시간

모두 탈 수 없다면 m번째 사람보다 -1분을 출력한다.

 

time을 오브젝트로 잡고 구현했다면 좀 더 깔끔했을 것 같다.

반응형