KAKAO BLIND RECRUITMENT > 주차요금 계산
차량이 주차된 시간을 구하는 문제
in/out의 순서는 어자피 정해져 있으므로 Map을 두개를 정해서 하나는 시간 총 계산용(timeCalMap), 하나는 in이 된 상태인지 아닌지를 계산하는 용(timeRecordMap)으로 나누어서 저장하였다.
만약에 timeRecordMap안에 데이터가 존재한다면 in인 상태니까 시간을 계산해야 하며, 없으면 집어 넣는 방식으로 구현.
마지막에 가격 계산만 해주면 끝!
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
class Solution {
static public int[] solution(int[] fees, String[] records) throws ParseException {
int defaultTime = fees[0];
int defaultFee = fees[1];
int unitTime = fees[2];
int unitFee = fees[3];
Map<String, Date> timeRecordMap = new HashMap<>();
Map<String,Long> timeCalMap = new HashMap<>();
for(String record : records) {
StringTokenizer st = new StringTokenizer(record);
Date time = new SimpleDateFormat("HH:mm").parse(st.nextToken());
String number = st.nextToken();
if(timeRecordMap.containsKey(number)) {
Date lastTime = timeRecordMap.get(number);
long diffMin = (time.getTime() - lastTime.getTime()) / 60000;
if(timeCalMap.containsKey(number)) {
timeCalMap.put(number,timeCalMap.get(number)+diffMin);
} else {
timeCalMap.put(number,diffMin);
}
timeRecordMap.remove(number);
} else {
timeRecordMap.put(number,time);
}
}
Date finalTime = new SimpleDateFormat("hh:mm").parse("23:59");
for(String key: timeRecordMap.keySet()) {
long diffMin = (finalTime.getTime() - timeRecordMap.get(key).getTime()) / 60000;
if(timeCalMap.containsKey(key)) {
timeCalMap.put(key,timeCalMap.get(key)+diffMin);
} else {
timeCalMap.put(key,diffMin);
}
}
List<String> keyList = new ArrayList<>(timeCalMap.keySet());
keyList.sort(Comparator.naturalOrder());
int [] answer = new int[timeCalMap.keySet().size()];
int cnt = 0;
for (String key : keyList) {
if(timeCalMap.get(key) < defaultTime) answer[cnt++] = defaultFee;
else {
answer[cnt++] = (int)(defaultFee + Math.ceil((timeCalMap.get(key) -defaultTime)/(double)unitTime) * unitFee);
}
}
return answer;
}
}
날짜 포맷때문에 틀렸다.
HH -> 0~23이구 hh -> 1~12방식이다.
mm은 하나밖에 없으며 ss -> second, SS -> millisecond,
yyyy.MM.dd -> 2001.07.04이다.