CSS&JS/코딩테스트

[JS100제]97. 택배 배달

arancia_ 2021. 12. 2. 13:42

JavaScript 100제 97번 택배 배달 문제 및 답안 링크

답안에서는 남아있는 짐이 없을 때 = 더이상 상하차할 짐이 없을 때
걸린 시간 + 남은짐중에 가장 거리가 많은것(Math.max)해서 하는 방식이고
나는 이렇게 해봤다.
근데 기본 답안이 훨씬 더 좋다. 아무래도 택배상하차가 더 빨리 끝나서 early return이 되기 때문에...

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*******
 * n 명의 택배 배달원은 쌓인 택배를 배달해야 합니다.
 * 각 택배는 접수된 순서로 배달이 되며 택배마다 거리가 주어집니다. 
 * 거리1당 1의 시간이 걸린다고 가정하였을 때 모든 택배가 배달 완료될 시간을 구하세요.
 * 
 * 1. 모든 택배의 배송 시간 1 이상이며 배달지에 도착하고 돌아오는 왕복 시간입니다.
 * 2. 택배는 물류창고에서 출발합니다.
 * 3. 배달을 완료하면 다시 물류창고로 돌아가 택배를 받습니다.
 * 4. 물류창고로 돌아가 택배를 받으면 배달을 시작합니다.
 * 5. 택배를 상차할 때 시간은 걸리지 않습니다.
 * 
 * 입력은 배달원의 수와 택배를 배달하는 배달 시간이 주어집니다.
 * 
 * ex) 배달원이 3명이고 각 거리가 [1,2,1,3,3,3]인 순서로 들어오는 경우
 * ********/
 
 const rider = 3;
 const times = [1,2,1,3,3,3];
 
//////////////////////////////
function get_sum_of_arr(arr){
    return arr.reduce((a,b)=>a+b);
}
 
function mySolution(rider,times){
    let timeList = [...times];
    let deliver = timeList.splice(0,rider);
    let delayTime = 0;
    
    while(true){
        for(let i=0; i<deliver.length; i++){
            if(deliver[i] <= 0){
                if(timeList.length != 0){
                    const next = timeList.shift();
                    deliver[i] = next;
                }
            }else{
                deliver[i] -= 1;
            }
        }
        if(get_sum_of_arr(deliver) <= 0){break;}
        delayTime++;
    }//while
 
    console.log(delayTime);
}//mySolution
 
mySolution(rider,times);
cs