[프로그래머스] LEVEL2 주차 요금 계산 JAVA

Pixel Dophin·2023년 8월 7일
0

프로그래머스

목록 보기
34/55

주차 요금 계산

문제링크

풀이

단순 구현
1. parking에 먼저 출차 기록을 바탕으로 몇시에 입차했는지 기록하고 출차시에 costs에 차량이 누적하여 얼마나 주차했는지 저장합니다.
2. 출차 기록을 다 확인후 아직 parking에 남아 있는 차량에 대하여 23:59으로 모두 출차하였다고 판단해준다.
3. costskey값인 차량 번호를 기준으로 오름차순 정렬(sort)한다.
4. 정렬된 키값을 바탕으로 요금을 계산한다.

주의할 점

올림을 계산할 때 그냥 / (나누기)를 하면 몫이 나오므로 올림을 위해서 나머지를 확인하던지, float이나 double로 변환해서 계산하는 과정이 필요하다!!

코드

import java.util.*;
class Solution {
    public int[] solution(int[] fees, String[] records) {
        Map<String, Integer> parking = new HashMap<>();
        Map<String, Integer> costs = new HashMap<>();
        
        for (int i = 0; i < records.length; i++) {
            String[] split = records[i].split(" ");
            String[] HHmm = split[0].split(":");
            
            int hour = Integer.parseInt(HHmm[0]);
            int mins = Integer.parseInt(HHmm[1]);
            int toMins = hour * 60 + mins;
            
            String carNumber = split[1];
            String inOut = split[2];
            
            if (inOut.equals("IN")) {
                parking.put(carNumber, toMins);
            } else {
                int startMins = parking.get(carNumber);
                int parkingMins = toMins - startMins;
                costs.put(carNumber, costs.getOrDefault(carNumber, 0) + parkingMins);
                parking.remove(carNumber);
            }
        }
        
        List<String> parkingKeySet = new ArrayList<>(parking.keySet());
        for (String carNumber : parkingKeySet) {
            int startMins = parking.get(carNumber);
            int toMins = 23 * 60 + 59;
            int parkingMins = toMins - startMins;
            costs.put(carNumber, costs.getOrDefault(carNumber, 0) + parkingMins);
            parking.remove(carNumber);
        }
        
        List<String> costsKeySet = new ArrayList<>(costs.keySet());
        Collections.sort(costsKeySet);
        
        int[] answer = new int[costsKeySet.size()];
        int idx = 0;
        for (String carNumber : costsKeySet) {
            int cost = fees[1];
            float totalMins = costs.get(carNumber) - fees[0] * 1.0f;
            if (totalMins > 0) {
                cost += Math.ceil( totalMins / fees[2]) * fees[3];
            }
            answer[idx++] = cost;
        }

        return answer;
    }
}
profile
안녕 👋 성장하고픈 개발자 💻 입니다

0개의 댓글

관련 채용 정보