앙큼한 개발기록

카카오 프로그래머스 [셔틀버스] 문제 Javascript 본문

개발/javascript

카카오 프로그래머스 [셔틀버스] 문제 Javascript

angkeum 2020. 6. 6. 17:07

문제 난이도 보다 문제를 이해하는데 시간이 많이 들었다 ㅠ

코딩보다 독서를 해야 하나... 

 

한참을 읽어 보니 생각보다 간단한 문제여서 술술 풀다가 

자꾸 7번 23번에서 에러가 터지길래 여기서 애를 많이 먹었다. 

 

결국 간단한 실수 하나로 오래동안 애 먹어 정리하고자 글을 작성하게 되었당.

그리고 다른 사람들 문제 푼거 보는데 블로그에 아무리 검색해도 script는 안나와서 

내가 적을거다. 

 

내가.

 

 

우선 결과 코드부터.

function solution(n, t, m, timetable) {
    let result;
    let time = getTime("09:00"); // 첫 셔틀버스 시간은 9시이므로
    let cleanTimetable = [];

    function getTime(time){ // 분으로 변환
        return (Number(time[0] + time[1]) * 60) + (Number(time[3] + time[4]));
    }

    // 줄 선 크루 배열 재구성 (String -> Number형으로 변환)
    for(let i = 0; i < timetable.length; i++) {
        cleanTimetable.push(getTime(timetable[i]));
    }

    // 줄 선 크루 배열 오름차순 재배치(sort)
    cleanTimetable.sort((a, b) => a - b);

    // 줄 선 크루 차례대로 시간별(n) 카카오 셔틀버스 타기
    for (let i = 0; i < n; i++) {
        // 탈 수 있는 크루 몇 명인지 필터링
        let goCrews = cleanTimetable.filter(crew => time >= crew).length;

        // 크루들을 태운다
        if (i === n - 1) {
            // 만약, 마지막 운행이고
            // 나머지 인원이 차에 꽉 차서 못탈 경우
            // 그 전에 타야하므로 와야하는 맞춰서 시간 업데이트
            if (goCrews >= m) time = cleanTimetable[m-1] - 1;
        } else {
            // 마지막 운행이 아니라면
            // 탈 수 있는 크루(최대 m명)들 배열에서 삭제(splice)하고, 현재 셔틀버스 시간 업데이트
            cleanTimetable.splice(0, goCrews > m ? m : goCrews);
            time += t;
        }
    }

    // 문제 출력값에 맞는 Number -> String형으로 변환
    result = String(Math.floor(time/60)).padStart(2, "0") + ":" + String(time%60).padStart(2, "0");
    return result;
}

 

가장 늦게 갈 수 있도록 하는 법.

1. 우선 시간 계산을 편하게 하기 위해서 분으로 바꾸고

2. 배열 하나 만들어서 들어온 시간들 분으로 바꾸고

3. 비교하기 위해서 숫자로 또 한번 바꿔주고

4. 순서가 뒤죽박죽이니 시간 순서대로 정렬해주고

 

여기서 애 먹음.

만약 ["10:10", 01:05", "03:00"] 이 분으로 바뀌면 [610, 61, 180] 

그냥 sort() 시 [61, 610, 180]  임으로 시간 순서대로 정렬이 안됨. 

compareFunction (비교 함수) 귀찮아도 까먹지 말고 그냥 맨날 넣자. 

 

5. 순서대로 타고 마지막 사람 탈때만 비교 하면 끄읕.

 

 

 

 

'개발 > javascript' 카테고리의 다른 글

Nuxt 설치하기  (0) 2020.08.23
[onsen-ui] 4. tabbar  (2) 2020.08.23
[onsen-ui] 3.navigation  (0) 2020.08.05
[onsen-ui] 2. page  (0) 2020.08.05
javascript sort 정리  (0) 2020.06.06
Comments