Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

코린이 탈출기

[2018 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 셔틀버스 본문

문제 풀이

[2018 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 셔틀버스

명란파스타 2020. 9. 11. 23:22

 

문제 바로가기

 

코딩테스트 연습 - [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

 

소요시간 : 2시간

시간을 어떻게 나타낼 것인지 생각하는 데에서 오래걸렸다

 

 

<문제 풀이 Logic>

- timeProcess() 함수로 "09:00" 형태의 string을 540(minute)으로 변환한다. 

- processAnswer() 함수로 숫자형태의 시간을 다시 "xx:xx" 형태로 변환한다.

1. n*m 크기의 2차원 배열 crew_time을 생성한다.

2. new_timetable에 timetable을 숫자형태로 바꿔서(timeProcess 사용) 저장하고 오름차순으로 정렬한다.

3. busTime은 버스도착시간을 key로 가지고, idx를 value로 가진다. ex) busTime["540"] = 0

4. busTime의 key에 접근할 수 있는 busTime_key 배열을 생성한다.

5. new_timetable을 순회하며 버스 도착 시간에 맞춰서 crew_time에 원소들을 넣어준다.

 

* 두 번째 testcase 적용 시

busTime_key: ["540", "550"] //09:00, 09:10

busTime: [540: 0, 550: 1]

new_timetable: [480, 549, 550]

crew_time: [[480],

                [549, 550]]

 

6. 마지막 버스의 마지막 승객이 m-1번째라면 (즉, 더 이상 승객이 탑승할 수 없는 상태), 콘의 탑승시각은 (그 승객의 탑승시간 -1) 이다.

마지막 버스에 아직 탈 자리가 남아있다면 콘의 탑승시각은 마지막 버스의 출발시간이다.

 

-전체 코드-

<!DOCTYPE html>

<body>
    <script>
        function timeProcess(arr) {
            var hour = Number(arr[0]);
            var minute = Number(arr[1]);

            var newTime = hour * 60 + minute;

            return newTime;
        }

        function processAnswer(time)
        {
            var hour = parseInt(time/60); 
            var minute = time%60; 

            var str_hour = "00" + hour;
            var str_minute = "00" + minute;

            var str = str_hour.slice(-2) + ":" + str_minute.slice(-2);
            console.log(str);

            return str;
        }
        function solution(n, t, m, timetable) {
            var answer = '';
            let busTime = [];
            let startTime = 9 * 60;
            let crew_time = new Array(n);

            for (let i = 0; i < crew_time.length; i++) {
                crew_time[i] = [];
            }

            for (let i = 0; i < n; i++) {
                busTime[startTime] = i;
                startTime += t;
            }
            console.log(busTime);
            console.log(crew_time);

            let new_timetable = [];

            timetable.forEach(element => {
                console.log(element)
                let myTime = element.split(":");
                new_timetable.push(timeProcess(myTime));
            });

            new_timetable.sort((a, b) => a - b);
            console.log(new_timetable);

            let busTime_idx = 0;
            let busTime_key = Object.keys(busTime);
            let crew_idx = 0;

            loop:
            for (let i = 0; i < new_timetable.length; i++) {
                let e = new_timetable[i];
                if (crew_idx == m) {
                    crew_idx = 0;
                    busTime_idx++;
                    if (busTime_idx == busTime_key.length)
                        break loop;
                }

                if (e > busTime_key[busTime_idx]) {
                    while (e > busTime_key[busTime_idx]) {
                        crew_idx = 0;
                        busTime_idx++;
                        if (busTime_idx == busTime_key.length)
                            break loop;
                    }

                }

                console.log(busTime[busTime_key[busTime_idx]]);
                crew_time[busTime[busTime_key[busTime_idx]]].push(e);
                crew_idx++;
            }

            console.log(crew_time);

            let conTime;

            console.log(m);
            console.log(busTime_key);

            let flag = 0;
            if(crew_time[crew_time.length-1].length < m)
                conTime = busTime_key[busTime_key.length-1];
            else
                conTime = crew_time[crew_time.length-1][m-1] -1;
            console.log(conTime);
           
            answer = processAnswer(conTime);
            return answer;
        }

        solution(1, 1, 5, ["08:00", "08:01", "08:02", "08:03"])
        solution(2, 10, 2, ["09:10", "09:09", "08:00"])
        solution(2, 1, 2, ["09:00", "09:00", "09:00", "09:00"])
        solution(1, 1, 5, ["00:01", "00:01", "00:01", "00:01", "00:01"])
        solution(1, 1, 1, ["23:59"]);
        solution(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"])
        solution(2, 2, 3, ["09:00", "09:11", "02:11", "02:12", "02:13", "02:14"]);
    </script>
</body>