Programmers : 주차 요금 계산

·2023년 3월 22일
0

알고리즘 문제 풀이

목록 보기
88/165
post-thumbnail

풀이요약

풀이상세

  1. 차가 들어오는 시간대와 나가는 시간대를 참고하여, 그 차를 누적한다. 나의 경우 현재 시간 차를 구하는 맵과 이를 누적하는 맵, 두개를 생성하여 구했다.

  2. 시간은 모두 분단위로 치환하여 계산했으며 다음 경우의 수를 고려해야한다.

    • 차의 정보가 IN으로 남은 경우, 23:59 에 나간것으로 확인하고 이를 계산해야한다.

배운점

  • 코드를 작성하고 디버깅하는데 드는 시간이 오래걸린다. 코테는 시간 싸움인데 아직 적응이 필요한가보다.
  • 매 코테를 보면 맵 관련 문제는 정말 빠지지 않고 나오는 듯 하다. 아마 효율성 테스트로 적용하기 좋아서 그런 듯 하다.
function solution([min_time, min_fee, extra_time, extra_fee], records) {
    var answer = [];
    const [car_map, fee_map] = [new Map(), new Map()];
    for(let i=0; i<records.length; i++) {
        const [curr_time, car_num, check] = records[i].split(" ");
        const time_make_min = curr_time.substring(0,2)*60 + curr_time.substring(3,5)*1;
        if(car_map.has(car_num)) {
            const time_diff = time_make_min - car_map.get(car_num);
            fee_map.has(car_num) ? fee_map.set(car_num, fee_map.get(car_num)+time_diff) : fee_map.set(car_num, time_diff);
            car_map.delete(car_num);
        } else {
            car_map.set(car_num, time_make_min);
        }
    }
    
    for(let key of car_map.keys()) {
        const time_diff = 23*60 + 59 - car_map.get(key);
        fee_map.has(key) ? fee_map.set(key, fee_map.get(key)+time_diff) : fee_map.set(key, time_diff);
        car_map.delete(key);
    }
    
    for(let key of [...fee_map.keys()].sort((a,b)=>a-b)) {
        answer.push(fee_map.get(key) <= min_time ? min_fee : min_fee + Math.ceil((fee_map.get(key)-min_time)/extra_time)*extra_fee);
    }   
    return answer;
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글