-
[Python] programmers 주차요금계산알고리즘/카카오기출 2022. 1. 22. 12:38728x90
1. 문제 링크
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
2. 문제 요약
- 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return
- 출차된 내역이 없는 경우, 23:59에 출차된 것으로 간주
- 초과한 시간이 단위 시간으로 나누어 떨어지지 않으면, 올림
3. 아이디어 정리
- records를 통해 총 주차 시간 구하기
- 출차를 안 한 경우 처리
- 차량별 요금 계산하기
- 차량 번호 정렬 후 주차 요금 리턴
4. 문제 풀이
4-1. 내풀이
from collections import defaultdict import math def solution(fees, records): """ :param fees: 기본 시간(분) 기본 요금(원) 단위 시간(분) 단위 요금(원) :param records: 시각, 차량번호, 내역 :return: 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아 """ def get_minute(time): h, m = time.split(":") return int(h) * 60 + int(m) answer = list() parking = dict() total = defaultdict(int) # 1. records를 통해 총 주차 시간 구하기 for r in records: t, n, f = r.split() # 시각, 차량번호, 내역 minute = get_minute(t) # 분으로 변환 if n in parking: # 이미 입차한 경우, 출차로 총 시간 측정 total[n] += minute - parking[n] del parking[n] else: # 입차인 경우 parking[n] = minute # 2. 출차를 안 한 경우 처리 end_minute = get_minute('23:59') for k, v in parking.items(): total[k] += (end_minute - v) # 3. 요금 계산하기 s1, m1, s2, m2 = fees # 기본 시간(분) 기본 요금(원) 단위 시간(분) 단위 요금(원) for k, v in total.items(): all = m1 # 기본요금 내기 if v > s1: all += math.ceil((v - s1) / s2) * m2 answer.append((k, all)) answer.sort() return [a[1] for a in answer]
5. 결론
- 구현
'알고리즘 > 카카오기출' 카테고리의 다른 글
[Python] programmers 방금 그곡 (0) 2022.02.11 [Python] programmers 3차 압축 (0) 2022.02.11 [Python] programmers 양궁대회 (0) 2022.01.23 [Python] programmers k진수에서 소수 개수 구하기 (0) 2022.01.22 [Python] programmers 신고 결과 받기 (1) 2022.01.22