[프로그래머스] 주차 요금 계산

솔방울·2022년 8월 25일
0

코딩테스트

목록 보기
4/13
post-thumbnail

1차 작성코드

function solution(fees, records) {
    const park_dict = new Map()
    records.forEach((record) => {
        const [re_time,who,InOrOut] = record.split(" ")    
        if(park_dict[who]) {
            if(InOrOut == "OUT") {
                let [afterHour,afterMin] = re_time.split(":").map((time) => parseInt(time))
                let [beforeHour,beforeMin] = (park_dict[who]["time"][park_dict[who]["time"].length-1]).split(":")
                park_dict[who]["acc"]+= (afterHour-beforeHour)*60 + (afterMin-beforeMin)
                park_dict[who]["inOut"].push(InOrOut)
                park_dict[who]["time"].push(re_time)
            } else {
                park_dict[who]["inOut"].push(InOrOut)
                park_dict[who]["time"].push(re_time)
            }
        } else {
            park_dict[who] = {acc:0,time:[re_time],inOut:[InOrOut]}
        }
    })
    for(park in park_dict) {
        if(park_dict[park]["inOut"][park_dict[park]["inOut"].length-1] == "IN") {
            let [beforeHour,beforeMin] = (park_dict[park]["time"][park_dict[park]["time"].length-1]).split(":")
            park_dict[park]["acc"]+= (23-beforeHour)*60 + (59-beforeMin)
        }
    }
    let result_list = []
    for(park in park_dict) {
        if(park_dict[park]["acc"] <= fees[0]) {
            result_list.push([park,fees[1]])
        } else {
            result_list.push([park,Math.ceil((park_dict[park]["acc"]-fees[0])/fees[2])*fees[3]+fees[1]])
        }
    }
    return result_list.sort((a,b) => a[0]-b[0]).map(v => v[1])
}

다른 사람의 풀이

function solution(fees, records) {
    const parkingTime = {};
    records.forEach(r => {
        let [time, id, type] = r.split(' ');
        let [h, m] = time.split(':');
        time = (h * 1) * 60 + (m * 1);
        if (!parkingTime[id]) parkingTime[id] = 0;
        if (type === 'IN') parkingTime[id] += (1439 - time);
        if (type === 'OUT') parkingTime[id] -= (1439 - time);
    });
    const answer = [];
    for (let [car, time] of Object.entries(parkingTime)) {
        if (time <= fees[0]) time = fees[1];
        else time = Math.ceil((time - fees[0]) / fees[2]) * fees[3] + fees[1]
        answer.push([car, time]);
    }
    return answer.sort((a, b) => a[0] - b[0]).map(v => v[1]);
}

총평 :

  1. 아직 프로그래머스에서는 at과 같은 자바스크립트 기능을 쓰지 못하는 점을 유의하자

  2. 변수명을 길게 설정하지 말자. 여긴 코딩테스트다. 예쁜 이름이 필요하지 않다. 한 글자로 설정해보자.

  3. sort 함수를 쓰는 방법을 기억하자.

  4. 사실상 에러 고치는데 시간이 많이 쓰인다.
    -1) 딕셔너리를 불러올 때에는 변수에 할당된 것을 쓰지 않는 이상, 따옴표로 감싸서 불러온다.

  5. 비구조화 할당을 버릇들이자.

profile
당신이 본 큰 소나무도 원래 작은 솔방울에 불과했다.

0개의 댓글