👍🏼 원래는 HashMap에 넣고 Key 기준으로 정렬하려고 했는데 TreeMap이 생각나서 다시 수정함 ! (TreeMap : Key 기준으로 자동 정렬)
🚨 주의 ) Math.ceil로 올림할 때 Double형으로 계산하고 올림해야함 (int형으로 나눗셈하면 안됨)
import java.util.*;
class Solution {
static int defTime, defFee, unitTime, unitFee;
public int[] solution(int[] fees, String[] records) {
defTime = fees[0];
defFee = fees[1];
unitTime = fees[2];
unitFee = fees[3];
// treeMap에 차량번호와 각각 시간 담기
Map<String, Integer> recMap = new TreeMap<>();
for(String record : records){
String[] str = record.split(" ");
// 분 단위로 변경
String[] time = str[0].split(":");
int minute = Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]);
// 누적 시간 구하기
if (str[2].equals("IN")){ // IN일 경우 시간 더하기
recMap.put(str[1], recMap.getOrDefault(str[1], 0) + minute);
} else { // OUT일 경우 시간 빼기
recMap.put(str[1], recMap.getOrDefault(str[1], 0) - minute);
}
}
// treeMap에 각 차량번호에 따라 누적 시간 요금 계산
int idx = 0;
int[] answer = new int[recMap.size()]; // 결과 배열
for(String rec : recMap.keySet()){
if (recMap.get(rec) >= 0){ // OUT이 입력되지 않았으면 23:59을 OUT으로 계산하기
recMap.put(rec, recMap.get(rec) - (23 * 60 + 59));
}
// 요금 계산 후 배열에 넣기
answer[idx++] = calFees(recMap.get(rec) * -1);
}
return answer;
}
public int calFees(int time){
if (time < defTime) return defFee;
return defFee + (int)Math.ceil(Double.valueOf(time - defTime) / Double.valueOf(unitTime)) * unitFee;
}
}