PROGRAMMERS/KAKAO
[프로그래머스] [JAVA] [Level 2] [2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산
c0mmedes
2022. 10. 21. 13:56
문제 설명
제한사항
입출력 예
import java.util.*;
class Solution {
// (String)시간을 (Int)min으로 바꿔주는 메소드
public int getMin(String time){
// ex) 15:30 t[0] = 15, t[1] = 30
String t[] = time.split(":");
// ex) int형으로 변환후 15 * 60 + 30
return Integer.valueOf(t[0])*60 + Integer.valueOf(t[1]);
}
public int[] solution(int[] fees, String[] records) {
Map<String, Integer> parking = new HashMap<>(); // 현재 파킹 중인 차들
Map<String, Integer> times = new HashMap<>(); // 차들의 누적 파킹 시간
List<String> cars = new ArrayList<>(); // 차들 list
for(String record : records){
String rc[] = record.split(" "); // records 배열의 첫번째 원소를 공백을 기준으로 잘라서 rc 배열에 넣기
int time = getMin(rc[0]); // 시간 05:34
String car = rc[1]; // 차량번호 5961
// 차들(cars) list에 차량번호가 등록되어 있지 않다면(새로운 차량일 때)
if(!cars.contains(car)){
cars.add(car); // 차량 등록
times.put(car, 0); // times Map에 차량 등록
}
// 파킹이 되어있다면(출차)
if(parking.containsKey(car)){
// times Map에 전에 등록된 시간에 새로운 누적시간 더해서 등록
times.put(car, times.get(car) + (time-parking.get(car)));
// 나갔으니 삭제
parking.remove(car);
// 입차
} else {
parking.put(car, time);
}
}
int[] answer = new int[cars.size()];
Collections.sort(cars); // 차량번호별로 정렬
for(int i=0; i<cars.size(); i++){
answer[i] = fees[1]; // 기본요금
String car = cars.get(i);
int time = times.get(car) - fees[0]; // 누적 시간에서 기본 시간 뺴주기
// 출차가 안되어 있다면(23:59)
if(parking.containsKey(car)) {
time += getMin("23:59")-parking.get(car);
}
// 요금 계산
if(time>0) {
answer[i] += (Math.ceil(time/(fees[2]*1.0))*fees[3]);
}
}
return answer;
}
}