상세 컨텐츠

본문 제목

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

프로그래머스 코딩테스트 풀이

by 발발개발 2022. 8. 1. 16:04

본문

원본 :

 

풀이

import java.text.*;
import java.util.*;

class Solution {
    public int[] solution(int[] fees, String[] records) {
        Map<String, Date> recordMap = new HashMap<>();
        Map<String, Integer> feeMap = new TreeMap<>();
        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");

        for (String record : records) {
            StringTokenizer st = new StringTokenizer(record, " ");
            Date time;
            try {
                time = dateFormat.parse(st.nextToken());
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
            String carNum = st.nextToken();
            String status = st.nextToken();

            if ("IN".equals(status)) {
                recordMap.put(carNum, time);
            } else {
                if (!feeMap.containsKey(carNum)) {
                    feeMap.put(carNum, 0);
                }

                feeMap.replace(carNum, feeMap.get(carNum) + (int)(time.getTime() - recordMap.get(carNum).getTime()) / 60000);
                recordMap.remove(carNum);
            }
        }

        for (String carNum : recordMap.keySet()) {
            if (!feeMap.containsKey(carNum)) {
                feeMap.put(carNum, 0);
            }

            try {
                feeMap.replace(carNum, feeMap.get(carNum) + (int)(dateFormat.parse("23:59").getTime() - recordMap.get(carNum).getTime()) / 60000);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        }

        int[] answer = new int[feeMap.size()];
        int idx = 0;

        for (int timeDiff : feeMap.values()) {
            if (timeDiff <= fees[0]) {
                answer[idx++] = fees[1];
            } else {
                answer[idx++] = fees[1] + (int)Math.ceil(((timeDiff - fees[0]) / (double)fees[2])) * fees[3];
            }
        }

        return answer;
    }
}

관련글 더보기

댓글 영역