[programmers]駐車料金の計算
問題の説明
駐車場の料金表と車両進入(入)出(出)記録の場合、車両別に駐車料金を計算したいです.次に例を示します.
-2000回の車両は18:59に入車した後、出車記録はなかった.そのため、23:59に咲いたと思います.
せいげんじょうけん
ナンバープレートは長さ4の文字列で、車を区別するために「0」から「9」で構成されています.
ソースコード
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
Map<String, Integer> ansmap = new HashMap<>(); // 누적시간용 Map
Map<String, Integer> map = new HashMap<>(); // 입,출차 관리용 Map
for(int i = 0; i < records.length; i++) {
String[] record = records[i].split(" ");
// 입차
if("IN".equals(record[2])) {
int intime = Integer.parseInt(record[0].substring(0,2))*60 + Integer.parseInt(record[0].substring(3,5)); // 입차 시간을 분 단위로 변환
map.put(record[1], intime);
}
// 출차
else {
int outtime = Integer.parseInt(record[0].substring(0,2))*60 + Integer.parseInt(record[0].substring(3,5));
int deftime = outtime - map.get(record[1]);
// 이미 출차된 적 있던 차라면 기존 시간에 누적
if(ansmap.containsKey(record[1])) {
int sumtime = ansmap.get(record[1]) + deftime;
ansmap.remove(record[1]);
ansmap.put(record[1], sumtime);
}
// 처음 출차되는 것이라면 ansmap에 put
else {
ansmap.put(record[1], deftime);
}
map.remove(record[1]);
}
}
// 출차 안한 차량 처리
if(!map.isEmpty()) {
for(String key : map.keySet()) {
int deftime = (23*60+59) - map.get(key);
if(ansmap.containsKey(key)) {
int sumtime = ansmap.get(key) + deftime;
ansmap.remove(key);
ansmap.put(key, sumtime);
}
else {
ansmap.put(key, deftime);
}
}
}
Map<String, Integer> sortedMap = new TreeMap<>(ansmap); // 차량 번호 작은 자동차순으로 정렬
int[] answer = new int[ansmap.size()];
int idx = 0;
for(String key : sortedMap.keySet()) {
int acctime = sortedMap.get(key);
// 누적 주차 시간이 기본 시간을 초과하는 경우
if(acctime > fees[0]) {
int sum = fees[1];
sum += (acctime-fees[0])%fees[2] == 0 ? (acctime - fees[0])/fees[2]*fees[3] : ((acctime - fees[0])/fees[2]+1) * fees[3];
answer[idx++] = sum;
}
// 초과하지 않는 경우 기본 요금만 청구
else {
answer[idx++] = fees[1];
}
}
return answer;
}
}
Review
車両番号別に出入りと積算時間を管理するためにHashMapを使用しました.
ある車は車を出てから再び車に入ることができ、総累計時間を求めた後、最後に料金を報告しなければならない.
再入車の場合は、現時点で積算するので、地図から車を取り出して戻します.
最後に車を出さなかった車についても、23:59を基準に車を出して計算します.
Reference
この問題について([programmers]駐車料金の計算), 我々は、より多くの情報をここで見つけました https://velog.io/@minwest/Programmers-주차-요금-계산テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol