ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산
    코딩 테스트/Level 2 2022. 1. 17. 12:44
    반응형

    https://programmers.co.kr/learn/courses/30/lessons/92341

     

    코딩테스트 연습 - 주차 요금 계산

    [180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]

    programmers.co.kr

    from datetime import datetime
    from math import ceil
    
    
    def calc_fee(fees: list, parking_time: int) -> int:
        if parking_time <= fees[0]:
            return fees[1]
        else:
            return fees[1] + fees[3] * ceil((parking_time - fees[0]) / fees[2])
    
    
    def solution(fees, records):
        car_records = {}
        for record in records[::-1]:
            time_in_out, car_num, in_out = record.split()
            car_records.setdefault(car_num, {'parking_time': 0})
            if in_out == 'OUT':
                car_records[car_num]['out_time'] = datetime.strptime(time_in_out, '%H:%M')
            else:
                if not car_records[car_num].get('out_time'):
                    car_records[car_num]['out_time'] = datetime.strptime('23:59', '%H:%M')
                car_records[car_num]['parking_time'] += \
                    (car_records[car_num]['out_time'] - datetime.strptime(time_in_out, '%H:%M')).seconds // 60
        return [calc_fee(fees, car_records[car_num]['parking_time']) for car_num in sorted(car_records.keys())]
    테스트 1 〉	통과 (2.48ms, 10.8MB)
    테스트 2 〉	통과 (2.29ms, 10.9MB)
    테스트 3 〉	통과 (2.41ms, 11MB)
    테스트 4 〉	통과 (2.56ms, 10.9MB)
    테스트 5 〉	통과 (3.53ms, 10.9MB)
    테스트 6 〉	통과 (3.61ms, 11MB)
    테스트 7 〉	통과 (11.19ms, 11.2MB)
    테스트 8 〉	통과 (8.49ms, 10.9MB)
    테스트 9 〉	통과 (3.45ms, 10.9MB)
    테스트 10 〉	통과 (10.00ms, 11.1MB)
    테스트 11 〉	통과 (13.49ms, 11.1MB)
    테스트 12 〉	통과 (16.78ms, 11.3MB)
    테스트 13 〉	통과 (2.29ms, 10.8MB)
    테스트 14 〉	통과 (2.33ms, 10.8MB)
    테스트 15 〉	통과 (3.52ms, 10.9MB)
    테스트 16 〉	통과 (2.24ms, 10.9MB)
    from math import ceil
    
    
    def calc_fee(fees: list, parking_time: int) -> int:
        if parking_time <= fees[0]:
            return fees[1]
        else:
            return fees[1] + fees[3] * ceil((parking_time - fees[0]) / fees[2])
    
    
    def time2min(t: str) -> int:
        h, m = t.split(':')
        return int(h) * 60 + int(m)
    
    
    def solution(fees, records):
        car_records = {}
        for record in records[::-1]:
            time_in_out, car_num, in_out = record.split()
            car_records.setdefault(car_num, {'parking_time': 0})
            if in_out == 'OUT':
                car_records[car_num]['out_time'] = time2min(time_in_out)
            else:
                if not car_records[car_num].get('out_time'):
                    car_records[car_num]['out_time'] = time2min('23:59')
                car_records[car_num]['parking_time'] += car_records[car_num]['out_time'] - time2min(time_in_out)
        return [calc_fee(fees, car_records[car_num]['parking_time']) for car_num in sorted(car_records.keys())]
    테스트 1 〉	통과 (0.07ms, 10.5MB)
    테스트 2 〉	통과 (0.05ms, 10.4MB)
    테스트 3 〉	통과 (0.05ms, 10.5MB)
    테스트 4 〉	통과 (0.08ms, 10.4MB)
    테스트 5 〉	통과 (0.28ms, 10.4MB)
    테스트 6 〉	통과 (0.41ms, 10.4MB)
    테스트 7 〉	통과 (2.20ms, 10.7MB)
    테스트 8 〉	통과 (1.77ms, 10.4MB)
    테스트 9 〉	통과 (0.23ms, 10.4MB)
    테스트 10 〉	통과 (1.42ms, 10.7MB)
    테스트 11 〉	통과 (2.32ms, 10.8MB)
    테스트 12 〉	통과 (2.20ms, 10.7MB)
    테스트 13 〉	통과 (0.04ms, 10.5MB)
    테스트 14 〉	통과 (0.03ms, 10.4MB)
    테스트 15 〉	통과 (0.03ms, 10.4MB)
    테스트 16 〉	통과 (0.03ms, 10.5MB)

     

    Java

    import java.util.ArrayList;
    import java.util.TreeMap;
    
    class Solution {
        int time2min(String time) {
            var hh_mm = time.split(":");
            return Integer.parseInt(hh_mm[0]) * 60 + Integer.parseInt(hh_mm[1]);
        }
    
        int calc_fee(int parking_time, int[] fees) {
            if (parking_time <= fees[0]) return fees[1];
            parking_time -= fees[0];
            return fees[1] + ((parking_time % fees[2] == 0) ? (parking_time / fees[2]) * fees[3] : (parking_time / fees[2] + 1) * fees[3]);
        }
    
        public int[] solution(int[] fees, String[] records) {
            var car_records = new TreeMap<String, ArrayList<Integer>>();
            for (var record : records) {
                var record_split = record.split(" ");
                car_records.computeIfAbsent(record_split[1], k -> new ArrayList<>());
                car_records.get(record_split[1]).add(time2min(record_split[0]));
            }
            var answer = new int[car_records.size()];
            var counter = 0;
            for (var car_num : car_records.keySet()) {
                var car_times = car_records.get(car_num);
                if (car_times.size() % 2 == 1)
                    car_times.add(time2min("23:59"));
                var parking_time = 0;
                for (var i = 0; i < car_times.size(); i++) {
                    parking_time += (i % 2 == 0) ? -car_times.get(i) : car_times.get(i);
                }
                answer[counter++] = calc_fee(parking_time, fees);
            }
            return answer;
        }
    }
    반응형
Designed by Tistory.