[programmers] 주차 요금 계산

sohee·2022년 11월 23일
0

주차 요금 계산(2022 KAKAO BLIND RECRUITMENT) 문제

문제 설명

주차장의 요금표와 차량이 들어오고 나간 기록이 주어졌을 때, 차량별로 주차 요금을 계산하는 문제이다. 누적 주차 시간이 기본시간 이하라면 기본 요금을 청구하고, 기본 시간을 초과했다면 기본요금에 더해서 초과한 시간의 단위 시간 마다 단위 요금을 청구한다.

문제 풀이 1.

2중 for문을 사용하였고, records에 배열 길이만큼 돌면서 해당 인덱스의 출차 여부를 판단하여 입차 한 차량이라면 다음 for문을 돌면서 출차의 기록을 찾아서 시간 계산을 한다. 만약, 출차가 되지 않은 차량이라면 자정(23:59)에서 입차 시간을 빼서 계산을 해 주었다.

public int[] solution(int[] fees, String[] records) {

    // 주차장의 요금표와 차량이 들어오고 나간 기록이 주어졌을 때 주차요금 계산
    Map<String, Integer> map = new TreeMap<>();
    int midnight = 23 * 60 + 59;
    for (int i = 0; i < records.length; i++) {
        String[] arr = records[i].split(" ");
        if (arr[2].equals("OUT")) {
            continue;
        }

        int time = Integer.parseInt(arr[0].split(":")[0]) * 60
                + Integer.parseInt(arr[0].split(":")[1]);

        boolean out = false;
        for (int j = i + 1; j < records.length; j++) {
            String[] arr2 = records[j].split(" ");
            if (arr[1].equals(arr2[1])) {
                int time2 = Integer.parseInt(arr2[0].split(":")[0]) * 60
                        + Integer.parseInt(arr2[0].split(":")[1]);

                map.put(arr[1], map.getOrDefault(arr[1], 0) + (time2 - time));
                out = true;
                break;
            }
        }
        // 출차된게 아니라면
        if (!out) {
            map.put(arr[1], map.getOrDefault(arr[1], 0) + (midnight - time));
        }
    }

    int[] answer = new int[map.size()];
    int index = 0;
    for (String key: map.keySet()) {
        double time = map.get(key);
        if (time > fees[0]) {
            answer[index] += Math.ceil((time - fees[0]) / fees[2]) * fees[3];
        }
        answer[index] += fees[1];
        index++;
    }

    return answer;
}

풀이 2 결과

어려운 문제는 아니였는데 쪼개서 시간 계산하고, 요금 배열 부분의 인덱스 값을 잘 못 불러와서 오타 찾고 하는 부분에서 시간이 오래 걸렸다.

profile
기억하려고 적는 개발 로그🌞

0개의 댓글