Search

주차 요금 계산

알고리즘
연습문제
플랫폼
프로그래머스
JCF
HashMap
상태
해결
생성 일시
2024/01/09 08:33
최종 편집 일시
2024/01/09 10:56

문제 설명

해결과정

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
복사