프로그래머스 LEVEL 2(주차 요금 계산)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-10-05

  • 해결 방법 :
    • Map() 이용 차량 번호 별 입출차 시간 차이 계산 (마지막에 출차하지 않은 경우도 추가)
    • 차량 번호가 낮은 순으로 출력하기 위해 배열로 바꿔 sort()
    • 기본 시간보다 초과하여 주차한 경우와 아닌 경우 나눠 요금 계산 후 answer 배열에 push()
  • 회고 :
    • x
  • 코드

    const TYPE = ['IN', 'OUT'];
    const FINAL = 1439;
    
    const timeToMinutes = (time) => {
        const [hour, minute] = time.split(':');
        return parseInt(hour) * 60 + parseInt(minute);
    }
    
    function solution(fees, records) {
        const answer = [];
        const map = new Map();
        const total_time = new Map();
        for (const record of records) {
            const [time, number, type] = record.split(' ');
            if (type === TYPE[0]) {
                map.set(number, timeToMinutes(time));
            } else {
                let time_diff = timeToMinutes(time) - map.get(number);
                if (total_time.has(number)) time_diff += total_time.get(number);
                total_time.set(number, time_diff);
                map.delete(number);
            }
        }
            
        for (const [key, value] of map.entries()) {
            const origin = total_time.has(key) ? total_time.get(key) : 0;
            total_time.set(key, origin + FINAL - value);
            map.delete(key);
        }
            
        const sorted_map = new Map([...total_time.entries()].sort());
            
        for (const [key, value] of sorted_map.entries()) {
            if (value > fees[0]) answer.push(fees[1] + Math.ceil((value - fees[0]) / fees[2]) * fees[3]);
            else answer.push(fees[1]);
        }
            
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges