[Snow-ball]프로그래밍(컴퓨터)/Algorithm Training
[Algorithm] 주차 요금 계산 (Programmers - JavaScript)
Snow-ball
2023. 12. 12. 22:51
반응형
문제 설명
주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 떄, 차량별로 주차요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.


제한사항


입출력 예

입출력 예 설명
입출력 예 #1
문제 예시와 같습니다.


풀이:
[ 주차 요금 계산 ] 알고리즘 문제의 경우에는 recodes 배열이 for문을 한번 도는 동안 얼마나 시간을 사용했는지에 대해 계산처리하면 되는 문제였다.
순서를 정리하자면,
첫째. recodes 배열에 값을 기준으로 In/Out 기준으로 분기처리를해 시간 계산처리를 한다.
둘째. 차 번호는 작은숫자의 순서대로 정렬이 되어야 하기 때문에 정렬을 하면서, 요금을 정산하기 전 table의 totalTime 값이 0보다 작다면 출차하지 않았기 때문에 23:59기준으로 처리를한다.
셋째. 요금을 정산하여 배열에 담는다.
|
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
32
33
34
35
36
37
|
function solution(fees, records) {
const answer = [];
const table = {};
const carNumberSet = new Set();
records.forEach((el) => {
const [time, carNumber, IO] = el.split(" ");
const [hour, minute] = time.split(":").map(Number);
const totalTime = hour * 60 + minute;
carNumberSet.add(carNumber);
if (IO === "IN") {
table[carNumber] = (table[carNumber] || 0) - totalTime;
} else {
table[carNumber] += totalTime;
}
});
[...carNumberSet].sort().forEach((key) => {
if (table[key] < 1) {
table[key] += 1439;
}
const [basicTime, basicFee, unitTime, unitFee] = fees;
if (table[key] < basicTime) {
answer.push(basicFee);
} else {
answer.push(
basicFee + Math.ceil((table[key] - basicTime) / unitTime) * unitFee
);
}
});
return answer;
}
|
cs |
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형