문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
Map<Integer, String> parkingLot = new HashMap<>();
int carNumber = 0;
String time = "";
for(String record : records) {
// 차량 입/출차 시간
time = record.substring(0,5);
// 차량 번호
carNumber = Integer.parseInt(record.substring(6,10));
// 차량 입/출차 기록이 있다면
if(parkingLot.containsKey(carNumber)) {
String history = parkingLot.get(carNumber) + " " + time;
parkingLot.put(carNumber, history);
}
// 차량 입/출차 기록이 없다면
else {
parkingLot.put(carNumber, time);
}
}
// parkingLot의 size를 길이로 가지는 정수형 배열 생성
int[] answer = new int [parkingLot.size()];
// parkingLot의 key값들을 Set으로 반환
Set<Integer> keys = parkingLot.keySet();
// 배열의 초기값으로 차량 번호 입력 배열 정렬
int index = 0;
// String 변수인 key 값을 Integer로 변환후 입력
for(Integer key : keys) {
answer[index++] = key;
}
// answer배열 정렬
Arrays.sort(answer);
// answer 의 원소는 차량 번호 해당 차량 번호의 Value 값을 가져온다.
for(int i = 0; i < answer.length; i++) {
String history = parkingLot.get(answer[i]);
int usedtime = timeCalc(history, parkingLot);
int fee = feesCalc(usedtime, fees);
answer[i] = fee;
}
// System.out.println(answer.toString());
// System.out.println(parkingLot.toString());
return answer;
}
// 시간 계산
public int timeCalc(String history, Map<Integer, String> parkingLot) {
// 차량 기록을 배열로 변환
String[] times = history.split(" ");
// 배열의 길이가 홀수라면 마지막 출차 기록이 없는것
if(times.length % 2 == 1) {
history += " 23:59";
times = history.split(" ");
}
// 출차기록
int outHour = 0;
// 입차기록
int inHour = 0;
// 출차기록
int outMin = 0;
// 입차기록
int inMin = 0;
// 총 사용시간(분)
int min = 0;
for(int i = 1; i < times.length; ) {
outHour = Integer.parseInt(times[i].substring(0,2));
outMin = (outHour*60) + Integer.parseInt(times[i].substring(3,5));
inHour = Integer.parseInt(times[i-1].substring(0,2));
inMin = (inHour*60) + Integer.parseInt(times[i-1].substring(3,5));
min += outMin - inMin;
i += 2;
}
return min;
}
// 요금 계산
public int feesCalc(int min, int[] fees) {
// 청구 요금
int fee = 0;
// 사용시간이 기본 시간보다 적거나 같다면
if(min <= fees[0]) {
// 청구 요금은 기본 요금이 된다.
fee += fees[1];
}
// 사용시간이 기본 시간보다 크다면
else {
// 사용시간에서 기본 시간을 차감한다
min -= fees[0];
// 청구 요금에 기본 요금을 추가한다.
fee += fees[1];
// 사용시간을 단위 시간으로 나누어 떨어지는지 검사한다.
if(min % fees[2] == 0) {
fee += (min/fees[2])*fees[3];
} else {
fee += ((min/fees[2])+1)*fees[3];
}
}
return fee;
}
}
Java
복사