250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- mutationobserver
- mock date
- 중첩 점
- 테스트 Date
- 프로그래머스
- Leetcode #javascript #알고리즘 #Algorithms #js
- 구름톤 챌린지
- jest
- create-next-app
- Hermes Engine
- 리액트네이티브
- 헤르메스 엔진
- 귤 고르기
- 구름톤챌린지
- 구름톤
- Google 애널리틱스
- 테이블 해시 함수
- 연결 요소 제거하기
- 최솟갑 구하기
- 자바스크립트
- 통신망분석
- 호텔 대실
- ResizeObserver
- Jest uuid syntax
- nextjs-performance
- 리액트네이티브 엔진
- 날짜 테스트
- nextjs
- JavaScript
- 과제 진행하기
Archives
- Today
- Total
나만보는개발공부블로그
[프로그래머스] 주차 요금 계산 본문
문제 내용
주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.
- 어떤 차량이 입차된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다.
- 0000번 차량은 18:59에 입차된 이후, 출차된 내역이 없습니다. 따라서, 23:59에 출차된 것으로 간주합니다.
- 00:00부터 23:59까지의 입/출차 내역을 바탕으로 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산합니다. 누적 주차 시간이 기본 시간이하라면, 기본 요금을 청구합니다.
- 누적 주차 시간이 기본 시간을 초과하면, 기본 요금에 더해서, 초과한 시간에 대해서 단위 시간 마다 단위 요금을 청구합니다.
- 초과한 시간이 단위 시간으로 나누어 떨어지지 않으면, 올림합니다. ⌈a⌉ : a보다 작지 않은 최소의 정수를 의미합니다. 즉, 올림을 의미합니다.
주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 records가 매개변수로 주어집니다. 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
해결 방안
먼저 string으로 만들어진 시간:분을 숫자로 변경해주고 객체에 각각 입차와 출차 기록과 함께 시간과 같이 저장해준다.
저장된 객체에서 시간계산을 해주고 마지막에 주어진대로 기본요금 시간이하이면 기본요금만 넣어주고 그 이상이면
결제금액 = 기본요금 + ((전체 입차 시간 - 기본 요금 시간) / 분단위) *분단위 요금
위의 공식대로 처리해주면 된다. 그리고 마지막으로 차번호대로 정렬시켜준다.
자바스크립트 코드
function solution(fees, records) {
function stringToTime(t) {
const [h,m] = t.split(":");
return Number(h) * 60 + Number(m);
}
let cars = {}
let result = [];
for(let i = 0; i < records.length; ++i) {
const [time, number, command] = records[i].split(" ");
const t = stringToTime(time);
if(cars[number] && command === 'OUT') {
cars[number].push([t, 'out']);
} else if (command === 'IN'){
if(cars[number]) {
cars[number].push([t, 'in'])
}else {
cars[number] = [[t, 'in']]
}
}
}
for(let [key,values] of Object.entries(cars)){
let entrance = 0;
let totalTime = 0;
for(let i = 0; i < values.length; ++i){
const [t, c] = values[i];
if(c === 'in'){
if(i === values.length - 1) {
totalTime += (stringToTime("23:59") - t);
} else {
entrance = t;
}
}
if(c === 'out'){
totalTime += (t - entrance)
}
}
totalTime -= fees[0];
let totalFee = 0;
if(totalTime > 0){
totalFee = (Math.ceil(totalTime / fees[2]) * fees[3]) + fees[1];
} else {
totalFee = fees[1];
}
result.push([key, totalFee]);
totalTime = 0;
}
result.sort((a,b) => a[0] > b[0] ? 1 : -1);
return result.map(v => v[1]);
}
'Algorithms' 카테고리의 다른 글
[프로그래머스] 배달 (1) | 2023.10.30 |
---|---|
[프로그래머스] 괄호변환 (1) | 2023.10.16 |
[프로그래머스] 괄호 회전하기 (0) | 2023.10.12 |
[프로그래머스] 방금그곡 (1) | 2023.10.11 |
[구름 먼데이 챌린지] 단풍나무 (0) | 2023.10.10 |