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

hhkim·2023년 9월 14일
0

Algorithm - JavaScript

목록 보기
133/188
post-thumbnail

풀이 과정

  1. 내역 배열에 대해 반복
  2. IN이면 in 객체에 시간 담기
    이때 시간은 분 단위로 바꿔서 저장
  3. OUT이면 in 객체에서 들어온 시간 가지고 요금 계산 후 결과 객체에 시간 누적
    이때 in 객체의 키 삭제: delete
  4. 반복이 끝나고 in 객체에 남아 있는 값은 23:59 출차로 해서 결과 객체에 시간 누적
  5. 결과 객체에 대해 반복하면서 요금 계산
  6. 결과 객체를 배열로 변환 후 차량 번호 오름차순으로 정렬

코드

function solution([baseM, baseFee, extraM, extraFee], records) {
  const objIn = {};
  const result = {};

  for (const record of records) {
    const [time, num, flag] = record.split(' ');
    const [h, m] = time.split(':').map(Number);
    const v = h * 60 + m;
    if (flag === 'IN') {
      objIn[num] = v;
    } else {
      result[num] = (result[num] || 0) + v - objIn[num];
      delete objIn[num];
    }
  }

  for (const [num, inTime] of Object.entries(objIn)) {
    const outTime = 23 * 60 + 59;
    result[num] = (result[num] || 0) + outTime - objIn[num];
  }

  for (const [num, time] of Object.entries(result)) {
    const duration = result[num] - baseM;
    result[num] =
      duration > 0
        ? baseFee + Math.ceil(duration / extraM) * extraFee
        : baseFee;
  }

  return Object.entries(result)
    .sort((a, b) => a[0] - b[0])
    .map((e) => e[1]);
}

0개의 댓글