[프로그래머스] 주차 요금 계산(Java)

수경·2023년 3월 16일
0

problem solving

목록 보기
128/174

프로그래머스 - 주차 요금 계산

풀이

  1. map을 사용해서 '번호판=시간'을 저장
    -> 입차 / 출차시간을 저장하되, 시간을 분으로 변환해서 저장

  2. 입차면 저장, 출차면 번호판의 시간을 가져와서 주차된 시간을 계산해서 다시 저장

  3. 저장된 데이터로 주차 요금 계산


코드

import java.util.*;

class Solution {
    public int[] solution(int[] fees, String[] records) {
        List<Integer> result = new ArrayList<>();
        Map<String, Integer> map = new HashMap<>();
        Map<String, Integer> costs = new HashMap<>();

        for (String recode : records) {
            String[] part = recode.split(" ");
            int hour = Integer.parseInt(part[0].substring(0, 2));
            int minute = Integer.parseInt(part[0].substring(3, 5));
            int time = hour * 60 + minute;
            String key = part[1];
            if (part[2].equals("IN")) {
                map.put(key, time);
            } else {
                int newTime  = time - map.get(key);
                costs.put(part[1], costs.getOrDefault(key, 0) + newTime);
                map.remove(part[1]);
            }
        }

        if (!map.isEmpty()) {
            for (String key : map.keySet()) {
                int time = 23 * 60 + 59;
                int newTime  = time - map.get(key);
                costs.put(String.valueOf(key), costs.getOrDefault(key, 0) + newTime);
            }
        }

        List<String> keySet = new ArrayList<>(costs.keySet());
        System.out.println(costs);
        Collections.sort(keySet);
        for (String key : keySet) {
            int time = costs.get(key);
            int cost = fees[1];
            if (time > fees[0]){
                cost += ((time - fees[0]) / fees[2]) * fees[3] + (((time - fees[0]) % fees[2]) == 0 ? 0 : fees[3]);
            }
            result.add(cost);
        }

        return result.stream().mapToInt(n -> n).toArray();
    }
}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글