호지

[프로그래머스] 주차 요금 계산 문제풀이 JS 본문

알고리즘/프로그래머스

[프로그래머스] 주차 요금 계산 문제풀이 JS

_hoji

records를 공백을 기준으로 split하여

[time, carNumber, IN/OUT]으로 구분되게 데이터를 생성한다(cars)

 

결과값은 차량번호가 낮은 순으로 반환하게 되어있으므로,

시간 순으로 정렬되어 있는 cars를 차량번호 순으로 정렬하면 IN/OUT순으로 정렬된다.

따라서 cars를 순회하면서 차량번호 순서대로 총 주차시간을 구한다.

이때 OUT이 없으면 23시 59분을 기준으로 값을 구한다.

 

차량번호 오름차순 순으로 총 주차시간을 구하면

각 주차시간에 해당하는 요금을 구하게 되면, 원하는 결과를 얻을 수 있다.

올림은 Math.ceil함수를 사용하면 된다.

const solution = (fees, records) => {
  const answer = []
  let index = -1
  let time = []
  const cars = []

  for (const record of records) {
    const r = record.split(' ')
    cars.push(r)
  }
  cars.sort((v1, v2) => v1[1] - v2[1])

  let carNumber
  for (let i = 0; i < cars.length; i++) {
    if (carNumber !== cars[i][1]) {
      index++
      carNumber = cars[i][1]
    }
    let h1, m1, h2, m2
    ;[h1, m1] = cars[i][0].split(':')
    if (i + 1 !== cars.length && cars[i + 1][1] === carNumber) {
      ;[h2, m2] = cars[i + 1][0].split(':')
      i += 1
    } else {
      ;[h2, m2] = [23, 59]
    }
    const currentTime = parseInt(h2) * 60 + parseInt(m2) - (parseInt(h1) * 60 + parseInt(m1))
    time[index] = time[index] ? time[index] + currentTime : currentTime
  }

  for (let i = 0; i < time.length; i++) {
    let fee = fees[1]
    time[i] -= fees[0]
    if (time[i] > 0) {
      fee += Math.ceil(time[i] / fees[2]) * fees[3]
    }
    answer.push(fee)
  }

  return answer
}

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

Comments