2022 KAKAO BLIND RECRUITMENT - 주차 요금 계산
Updated:
Java
주차 요금 계산
문제
접근 방법
Map과 Set을 사용하여 해결하였다.
코드
import java.util.*;
import java.util.Map.Entry;
class Solution {
static public int[] solution(int[] fees, String[] records) {
int[] answer = {};
Map<String, Integer> pkLot = new HashMap<>();
Map<String, Integer> carTime = new HashMap<>();
Set<String> cars = new HashSet<>();
StringTokenizer stk;
String carNum;
int curT, lastT;
boolean isIn;
for(String rec : records) {
stk = new StringTokenizer(rec);
// 입력 record 변환
curT = strToInt(stk.nextToken());
carNum = stk.nextToken();
cars.add(carNum);
if(stk.nextToken().equals("IN")) {
isIn = true;
}
else
isIn = false;
// 출차
if(!isIn) {
lastT = pkLot.get(carNum);
pkLot.remove(carNum);
// 그 동안의 주차 시간을 기록
carTime.put(carNum, carTime.getOrDefault(carNum, 0) + curT - lastT);
}
else { // 입차
pkLot.put(carNum, curT);
}
}
// 하루가 끝날때 까지 출차되지 않은 차들
List<Entry<String, Integer>> mapList = new ArrayList<>(pkLot.entrySet());
curT = strToInt("23:59");
for(Entry<String, Integer> en : mapList) {
lastT = en.getValue();
carTime.put(en.getKey(), carTime.getOrDefault(en.getKey(), 0) + curT - lastT);
}
// 금액 계산
int calM = 0;
double calT;
int basicT = fees[0];
int basicM = fees[1];
double perT = fees[2];
int perM = fees[3];
mapList = new ArrayList<>(carTime.entrySet());
String car;
Map<String, Integer> carFee = new HashMap<>();
for(Entry<String, Integer> en : mapList) {
calM = basicM;
car = en.getKey();
curT = en.getValue();
// 기본 시간보다 오래 있었으면
if(curT > basicT) {
calT = (curT - basicT) / perT;
calM += (Math.ceil(calT) * perM);
}
carFee.put(car, calM);
}
List<String> list = new ArrayList<>(cars);
Collections.sort(list);
int len = cars.size();
answer = new int[len];
for(int i = 0; i < len; i++) {
answer[i] = carFee.get(list.get(i));
}
return answer;
}
static int strToInt(String time) {
String[] sp = time.split(":");
return 60 * Integer.parseInt(sp[0]) + Integer.parseInt(sp[1]);
}
static int stoi(String str) {
return Integer.parseInt(str);
}
public static void main(String[] args) {
int[] fees = {1, 461, 1, 10};
String[] records = {"00:00 1234 IN"};
System.out.println(Arrays.toString(solution(fees, records)));
}
}