프로그래머스 LEVEL 2(주차 요금 계산)
-
사용 언어 : 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