[Refresh ! 코딩 테스트 / js] -[1차] 셔틀버스

정대만·2025년 2월 17일

  • 카카오는 벽이 높은거같다 ( 당연 ) 이게 1차 라니..

문제해석

  • 여기서 중요한것이 마지막 셔틀 버스를 타야된다는것이다.

  • 그러니
    test 4에서 9:00 에 타는이유는 9시에 출발하는게 마지막 셔틀버스이기때문이고
    18:00 에 타는 이유도 같은 이유다 .

  • 이부분이 헷갈려서 다른 사람들 코드를 참조 했다.

나의 풀이

function solution(n, t, m, timetable) {
    // 시간 문자열을 분 단위로 변환하는 함수
    const timeable_tominute = (str) => {
        let hour = Number(str.slice(0, 2));
        let minute = Number(str.slice(3, 5));
        return hour * 60 + minute;
    };

    // 분을 다시 "hh:mm" 형태의 문자열로 변환하는 함수
    const minute_to_hour = (strr) => {
        let hour = Math.floor(strr / 60);
        let minute = strr % 60;
        return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;
    };

    let hour_update = 9 * 60; // 09:00을 분 단위로 변환
    timetable = timetable.map(timeable_tominute).sort((a, b) => a - b);
    let clock = 0;

    for (let i = 1; i <= n; i++) {
        // 이번 셔틀에 탈 수 있는 사람들을 찾기
        let in_bus = timetable.filter((el) => el <= hour_update).slice(0, m);
        
        if (i === n) {
            // 마지막 셔틀에서 가능한 가장 늦은 시간 계산
            if (in_bus.length < m) {
                clock = hour_update;
            } else {
                clock = in_bus[m - 1] - 1;
            }
        }

        // 셔틀 출발 후, 이미 탄 사람들은 제거
        timetable = timetable.slice(in_bus.length);

        // 다음 셔틀 시간 업데이트
        hour_update += t;
    }

    return minute_to_hour(clock);
}
  • padstart :
    여기부분 을 새로 알게 되었다.
  • 답이 맞지만 헷갈리는 부분은 다시 정리
et in_bus = timetable.filter((el) => el <= hour_update).slice(0, m);
  • 이부분은 m 보다 많은 수가 담길때 이수만큼까지 자르고
timetable = timetable.slice(in_bus.length);
  • 마지막 부분에 filter 하라는 함수이다. 따라서
 else{
            timetable.splice(0,in_bus.length > m ? m : in_bus.length)
        }
  • 이런식으로 고쳐도 된다
profile
안녕하세요

0개의 댓글