원본 :
풀이
import java.text.*;
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
Map<String, Date> recordMap = new HashMap<>();
Map<String, Integer> feeMap = new TreeMap<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
for (String record : records) {
StringTokenizer st = new StringTokenizer(record, " ");
Date time;
try {
time = dateFormat.parse(st.nextToken());
} catch (ParseException e) {
throw new RuntimeException(e);
}
String carNum = st.nextToken();
String status = st.nextToken();
if ("IN".equals(status)) {
recordMap.put(carNum, time);
} else {
if (!feeMap.containsKey(carNum)) {
feeMap.put(carNum, 0);
}
feeMap.replace(carNum, feeMap.get(carNum) + (int)(time.getTime() - recordMap.get(carNum).getTime()) / 60000);
recordMap.remove(carNum);
}
}
for (String carNum : recordMap.keySet()) {
if (!feeMap.containsKey(carNum)) {
feeMap.put(carNum, 0);
}
try {
feeMap.replace(carNum, feeMap.get(carNum) + (int)(dateFormat.parse("23:59").getTime() - recordMap.get(carNum).getTime()) / 60000);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
int[] answer = new int[feeMap.size()];
int idx = 0;
for (int timeDiff : feeMap.values()) {
if (timeDiff <= fees[0]) {
answer[idx++] = fees[1];
} else {
answer[idx++] = fees[1] + (int)Math.ceil(((timeDiff - fees[0]) / (double)fees[2])) * fees[3];
}
}
return answer;
}
}
최솟값 만들기 (연습문제) (0) | 2022.08.01 |
---|---|
최댓값과 최솟값 (연습문제) (0) | 2022.08.01 |
줄 서는 방법 (연습문제) (0) | 2022.08.01 |
숫자의 표현 (연습문제) (0) | 2022.08.01 |
숫자 블록 (연습문제) (0) | 2022.07.29 |
댓글 영역