단순 구현
1. parking
에 먼저 출차 기록을 바탕으로 몇시에 입차했는지 기록하고 출차시에 costs
에 차량이 누적하여 얼마나 주차했는지 저장합니다.
2. 출차 기록을 다 확인후 아직 parking
에 남아 있는 차량에 대하여 23:59으로 모두 출차하였다고 판단해준다.
3. costs
의 key
값인 차량 번호를 기준으로 오름차순 정렬(sort
)한다.
4. 정렬된 키값을 바탕으로 요금을 계산한다.
올림을 계산할 때 그냥 / (나누기)를 하면 몫이 나오므로 올림을 위해서 나머지를 확인하던지, float이나 double로 변환해서 계산하는 과정이 필요하다!!
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
Map<String, Integer> parking = new HashMap<>();
Map<String, Integer> costs = new HashMap<>();
for (int i = 0; i < records.length; i++) {
String[] split = records[i].split(" ");
String[] HHmm = split[0].split(":");
int hour = Integer.parseInt(HHmm[0]);
int mins = Integer.parseInt(HHmm[1]);
int toMins = hour * 60 + mins;
String carNumber = split[1];
String inOut = split[2];
if (inOut.equals("IN")) {
parking.put(carNumber, toMins);
} else {
int startMins = parking.get(carNumber);
int parkingMins = toMins - startMins;
costs.put(carNumber, costs.getOrDefault(carNumber, 0) + parkingMins);
parking.remove(carNumber);
}
}
List<String> parkingKeySet = new ArrayList<>(parking.keySet());
for (String carNumber : parkingKeySet) {
int startMins = parking.get(carNumber);
int toMins = 23 * 60 + 59;
int parkingMins = toMins - startMins;
costs.put(carNumber, costs.getOrDefault(carNumber, 0) + parkingMins);
parking.remove(carNumber);
}
List<String> costsKeySet = new ArrayList<>(costs.keySet());
Collections.sort(costsKeySet);
int[] answer = new int[costsKeySet.size()];
int idx = 0;
for (String carNumber : costsKeySet) {
int cost = fees[1];
float totalMins = costs.get(carNumber) - fees[0] * 1.0f;
if (totalMins > 0) {
cost += Math.ceil( totalMins / fees[2]) * fees[3];
}
answer[idx++] = cost;
}
return answer;
}
}