슈콩

[프로그래머스] Lv.2 주차 요금 계산 본문

Algorithms/Programmers

[프로그래머스] Lv.2 주차 요금 계산

shukong 2025. 10. 17. 09:52

 

 

[문제]

https://school.programmers.co.kr/learn/courses/30/lessons/92341#qna

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

[소스 코드]

import java.util.*;
class Solution {
    public int[] solution(int[] fees, String[] records) {
        Map<Integer,Integer> inTime = new HashMap<>();
        Map<Integer,Integer> outTime = new HashMap<>();
        for(String order : records){
            String[] info = order.split(" ");
            String[] time = info[0].split(":");
            int timeInfo = Integer.valueOf(time[0])*60 + Integer.valueOf(time[1]);
            int car = Integer.valueOf(info[1]);
            if(info[2].equals("IN")){
                inTime.put(car,timeInfo); 
            }
            else{
                int totalTime  = timeInfo - inTime.get(car);
                outTime.put(car,outTime.getOrDefault(car,0) + totalTime);
                inTime.remove(car);
            }
        }
        for(int car : inTime.keySet()){
            int totalTime = 23*60+59 - inTime.get(car);
            outTime.put(car,outTime.getOrDefault(car,0)+totalTime);
        }
        List<Integer> list = new ArrayList<>(outTime.keySet());
        Collections.sort(list);
        int[] answer = new int[list.size()];
        for(int i=0;i<list.size();i++){
            int time = outTime.get(list.get(i));
            int totalFee = 0;
            totalFee = fees[1];
            if(time>fees[0]) {
                time -= fees[0];
                totalFee += (int)Math.ceil((double)time / fees[2])*fees[3];
            }
            answer[i] = totalFee;
        }
        return answer;
    }
}