코테 문제풀이 2일차

아빠는 외계연·2022년 12월 20일
0

CodingTest

목록 보기
3/18

👑문제: [프로그래머스 Level2]

KAKAO BLIND RECRUITMENT > 주차요금 계산

문제 설명

차량이 주차된 시간을 구하는 문제
in/out의 순서는 어자피 정해져 있으므로 Map을 두개를 정해서 하나는 시간 총 계산용(timeCalMap), 하나는 in이 된 상태인지 아닌지를 계산하는 용(timeRecordMap)으로 나누어서 저장하였다.
만약에 timeRecordMap안에 데이터가 존재한다면 in인 상태니까 시간을 계산해야 하며, 없으면 집어 넣는 방식으로 구현.
마지막에 가격 계산만 해주면 끝!

풀이 과정

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

class Solution {
    static public int[] solution(int[] fees, String[] records) throws ParseException {
        int defaultTime = fees[0];
        int defaultFee = fees[1];
        int unitTime = fees[2];
        int unitFee = fees[3];


        Map<String, Date> timeRecordMap = new HashMap<>();
        Map<String,Long> timeCalMap = new HashMap<>();
        for(String record : records) {
            StringTokenizer st = new StringTokenizer(record);
            Date time = new SimpleDateFormat("HH:mm").parse(st.nextToken());
            String number = st.nextToken();
            if(timeRecordMap.containsKey(number)) {
                Date lastTime = timeRecordMap.get(number);
                long diffMin = (time.getTime() - lastTime.getTime()) / 60000;
                if(timeCalMap.containsKey(number)) {
                    timeCalMap.put(number,timeCalMap.get(number)+diffMin);
                } else {
                    timeCalMap.put(number,diffMin);
                }
                timeRecordMap.remove(number);
            } else {
                timeRecordMap.put(number,time);
            }
        }
        Date finalTime = new SimpleDateFormat("hh:mm").parse("23:59");
        for(String key: timeRecordMap.keySet()) {
            long diffMin = (finalTime.getTime() - timeRecordMap.get(key).getTime()) / 60000;
            if(timeCalMap.containsKey(key)) {
                timeCalMap.put(key,timeCalMap.get(key)+diffMin);
            } else {
                timeCalMap.put(key,diffMin);
            }
        }
        List<String> keyList = new ArrayList<>(timeCalMap.keySet());
        keyList.sort(Comparator.naturalOrder());
        int [] answer = new int[timeCalMap.keySet().size()];
        int cnt = 0;
        for (String key : keyList) {
            if(timeCalMap.get(key) < defaultTime) answer[cnt++] = defaultFee;
            else {
                answer[cnt++] = (int)(defaultFee + Math.ceil((timeCalMap.get(key) -defaultTime)/(double)unitTime) * unitFee);
            }
        }
        return answer;
    }
}

느낀점

날짜 포맷때문에 틀렸다.
HH -> 0~23이구 hh -> 1~12방식이다.
mm은 하나밖에 없으며 ss -> second, SS -> millisecond,
yyyy.MM.dd -> 2001.07.04이다.

profile
Backend Developer

0개의 댓글