주차 요금 관리

문제


문제풀이

카카오 문제인데 시물레이션 문제를 내면 엄청나게 시간을 많이 잡아 먹힌다. 일단 차량의 IN과 OUT에 따라 맵에 들어있는 시간을 빼주고 더해줘야 한다. 그렇게 다 정리가 되면 아직 출차 되지 않은 차량은 23:59 분 기준으로 또 값을 변경해줘야 한다. 

 

이후 들어 있는 시간으로 기본시간을 초과한 경우 기본값 + 추가요금을 내게 하고 기본시간을 초과하지 못한 경우 기본 값만 내게 계산을 해서 배열에 담은 후 반환해주면 된다. 


 나의 답안

public static int[] solution(int[] fees, String[] records) {
    ArrayList<Integer> answer = new ArrayList<>();
    LinkedList<String> parking = new LinkedList<>();
    Map<String, Integer> cars = new HashMap<>();

    for (int i = 0; i < records.length; i++) {
        String[] s = records[i].split(" ");

        if ("IN".equals((s[2]))) {
            String[] time = (s[0]).split(":");
            int sum = Integer.parseInt(time[1]) + (Integer.parseInt(time[0]) * 60);
            cars.put(s[1], cars.getOrDefault(s[1], 0) - sum);
            parking.add(s[1]);
        } else {
            String[] time = (s[0]).split(":");
            int sum = Integer.parseInt(time[1]) + (Integer.parseInt(time[0]) * 60);
            cars.put(s[1], sum + cars.get(s[1]));
            parking.remove(s[1]);
        }
    }

    for (int i = 0; i < records.length; i++) {
        String[] s = records[i].split(" ");
        if (parking.contains(s[1])) {
            String[] time = "23:59".split(":");
            int sum = Integer.parseInt(time[1]) + (Integer.parseInt(time[0]) * 60);
            cars.put(s[1], sum + cars.get(s[1]));
            parking.remove(s[1]);
        }
    }

    ArrayList<String> list  = new ArrayList<>(cars.keySet());
    list.sort((s1, s2) -> s1.compareTo(s2));

    for (String key : list) {
        int time = cars.get(key).intValue();
        int cost = 0;

        if (time / fees[0] > 0) {
            cost = fees[1];
            time -= fees[0];
        } else if (time < fees[0]) {
            cost = fees[1];
            time = 0;
        }
        int ceil = (int) Math.ceil((float)time / fees[2]);
        cost += ceil * fees[3];
        answer.add(cost);
    }
    return answer.stream().mapToInt(i -> i).toArray();
}

'Programmers 문제풀이 > Lv.2' 카테고리의 다른 글

주식 가격  (0) 2023.04.05
오픈채팅방  (0) 2023.04.05
[3차] n진수 게임  (0) 2023.04.03
할인 행사  (0) 2023.04.03
피로도  (0) 2023.04.03