-
[2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산알고리즘/프로그래머스 2022. 8. 24. 19:44
https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=python3
문제 설명
- 들어오고 나가는 차량에 대해서, 요금을 계산하려고 한다.
주어지는 데이터
- fees에는 기본시간(분), 기본요금, 단위시간(분), 단위요금 이 담겨있다.
- records는 시간, 차량번호, 기록(IN, OUT) 이 담겨있다.
풀이
1. 각 차량의 번호를 key로 가지고, 입차했던 시간을 value로 가지는 딕셔너리를 만든다.
모든 입-출차 시간을 각각 계산하여 더할까 하다가, 좀 더 괜찮은 방법을 생각해냈다.
만약 A라는 차량에 대한 입출차 시간이 아래와 같다면
시간 입차/출차 value(분단위로 계산) 05:00 입차 -300 07:00 출차 120 17:00 입차 -900 19:00 출차 240 tb[b] += (int(a[0:2])*60 + int(a[3:5])) * (-1 if c=='IN' else 1) 과 같이
입차시간의 경우 value에서 빼주고, 출차시간의 경우 더해주면, 결국 필요한 값이 남게된다.
2. 조건에 따라 값 반환
조건에 따라 차량의 번호가 작은 순서대로 반복하여 answer에 추가해준다.
3. 코드
from collections import defaultdict import math def solution(fees, records): tb = defaultdict(int) answer = [] for r in records: a, b, c = r.split(' ') tb[b] += (int(a[0:2])*60 + int(a[3:5])) * (-1 if c=='IN' else 1) for k in sorted(tb.keys()): time = tb[k] if tb[k] > 0 else tb[k]+1439 if time <= fees[0]: answer.append(fees[1]) else: answer.append(math.ceil((time - fees[0])/fees[2]) * fees[3] + fees[1]) return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Python] 에어컨 (2) 2023.07.28 [Python] 상담원 인원 (1) 2023.07.23 [2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기 (0) 2022.06.24 [2022 KAKAO BLIND RECRUITMENT] 신고 결과 받기 (0) 2022.06.24 [DP] 정수 삼각형 (0) 2022.06.23