[프로그래머스] '주차요금 계산'2022 KAKAO BLIND RECRUITMENT 문제

김대운·2023년 1월 12일
0
post-thumbnail

[프로그래머스] '주차요금 계산'2022 KAKAO BLIND RECRUITMENT 문제


문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/92341

코드

function solution(fees, records) {
  // recors 재배열
  records = records.map((a) => a.split(" ")).sort((a, b) => a[1] - b[1]);
  const minutes = {};

  while (records.length) {
    const [time, carNum, inOrOut] = records.shift();

    // 들어왔으면 들어온 시간을 분으로 바꾼 뒤 23:59 를 분으로 바꾼 1439에서 빼주고 해당 minutes 에 더해줌
    if (inOrOut === "IN") {
      const entranceTime = time;
      const minuteOfUse = 1439 - minuteConverter(entranceTime);
      if (minutes[carNum]) {
        minutes[carNum] += minuteOfUse;
      } else minutes[carNum] = minuteOfUse;
      // 나갔으면 들어온 나간 시간을 분으로 바꾼 뒤 23:59 를 분으로 바꾼 1439에서 빼주고 해당 minutes에서 빼줌
    } else {
      const getOutTime = time;
      const minuteOfUse = 1439 - minuteConverter(getOutTime);
      if (minutes[carNum]) {
        minutes[carNum] -= minuteOfUse;
      } else minutes[carNum] = minuteOfUse;
    }
  }

  // minutes를 차넘버 순으로 정렬
  const sortedMinute = Object.entries(minutes)
    .sort((a, b) => a[0] - b[0])
    .map((a) => a[1]);
  // 요금 계산 돌리기
  const rates = sortedMinute.map((a) => rateCalculator(a, fees));
  return rates;
}

const minuteConverter = (time) => {
  const [hour, minute] = time.split(":").map(Number);
  return hour * 60 + minute;
};

const rateCalculator = (minute, fees) => {
  const [baseMinute, baseRate, unitMinute, unitRate] = fees;
  if (minute <= baseMinute) return baseRate;
  else {
    const overTime = minute - baseMinute;
    const overRate = unitRate * Math.ceil(overTime / unitMinute);
    return baseRate + overRate;
  }
};

0개의 댓글