ah-ryeong / Ahgorithm

0 stars 0 forks source link

[JavaScript] 주차 요금 계산 #19

Open ah-ryeong opened 1 year ago

ah-ryeong commented 1 year ago

[문제]

문제에 표가 많아서, 링크로 대체 https://school.programmers.co.kr/learn/courses/30/lessons/92341

오랜만에 제출까지 한번에 통과해서 좋긴한데.. for문 if문 거미줄이 따로 없다.. ^^>

function solution(fees, records) {
    var answer = [];
    let list = [];
    let carNumber = [];

    for(let i = 0; i < records.length; i++){
        list.push(records[i].split(" "));
        carNumber.push(list[i][1]);
    };

    carNumber = carNumber.filter((item, i) => carNumber.indexOf(item) === i).sort();

    for(let i = 0; i < carNumber.length; i++){
        let time = [];
        let timeResult = [];
        for(let j = 0; j < list.length; j++){
            if(carNumber[i] === list[j][1]) {
                if(list[j][2] === "IN") {
                    if(time[0] === undefined) {
                        time.push(new Date(`2023-04-19T${list[j][0]}`));
                    } else {
                        const time2 = new Date(`2023-04-19T23:59`);
                        timeResult.push((time2.getTime() - time[0].getTime()) / (1000*60));
                        time = [];
                    }
                } else {
                    const time2 = new Date(`2023-04-19T${list[j][0]}`);
                    timeResult.push((time2.getTime() - time[0].getTime()) / (1000*60));
                    time = [];
                }
            };
        };

        if(time[0] !== undefined) {
            const time2 = new Date(`2023-04-19T23:59`);
            timeResult.push((time2.getTime() - time[0].getTime()) / (1000*60));
            time = [];
        };

        const result = timeResult.reduce(function add(sum, currValue) {
            return sum + currValue;
        }, 0);

        if(result <= fees[0]) {
            answer.push(fees[1]);
        } else {
            answer.push(fees[1] + Math.ceil((result - fees[0]) / fees[2]) * fees[3]);
        }
    };

    return answer;
}

solution([180, 5000, 10, 600], ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"]);