-
[2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산코딩 테스트/Level 2 2022. 1. 17. 12:44반응형
https://programmers.co.kr/learn/courses/30/lessons/92341
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; } }
반응형