반응형
문제는 어렵지 않다.
차근차근 풀면 어떻게든 풀 수 있는 문제.
다만 코드를 짜다보니 점점 더러워지는 나의 코드....ㅜㅜ
문제 설명
주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.
만약 출차기록이 없다면 23:59에 나간 것으로 간주한다.
기본요금 적용 시간보다 적은 시간 머물렀다면 당연히 기본요금으로 매긴다.
단위시간이 10분인데 8분 머물렀다면 10분으로 간주한다.
상식적인 주차요금을 계산하면 된다.
아래는 내가 짠 코드... (더러움 주의ㅜㅜ)
import math
def solution(fees, records):
answer = []
dic = {}
#key: number, value: {minute: 0, in_time: ""}
min_time, min_fee, std_time, std_fee = fees
for record in records:
timestamp, number, flag = record.split()
if flag == "IN":
if number in dic :
dic[number]["in_time"] = timestamp
else:
dic[number] = {"minute": 0, "in_time": timestamp, "fee": 0}
else:
dic[number]["minute"] += calculate(dic[number]["in_time"], timestamp)
dic[number]["in_time"] = ""
for number in dic:
if dic[number]["in_time"] != "" :
dic[number]["minute"] += calculate(dic[number]["in_time"], "23:59")
total_time = dic[number]["minute"]
#기본요금보다 안나온 경우
if total_time <= min_time :
dic[number]["fee"] = min_fee
#초과한 경우
else:
dic[number]["fee"] = min_fee + (math.ceil((total_time - min_time) / std_time)) * std_fee
numbers = sorted(dic.keys())
for number in numbers :
answer.append(dic[number]["fee"])
return answer
def calculate(intime, outtime):
in_h, in_min = intime.split(":")
out_h, out_min = outtime.split(":")
value = int(out_h)* 60 + int(out_min) - (int(in_h) * 60 + int(in_min))
return value
from collections import defaultdict
을 자꾸 까먹어서 딕셔너리 만드는데 if 를 한층 쌓게 된다 ㅜㅜ
다음엔 꼭!! 꼭 사용해야지.
다른사람 풀이를 보니까 class를 이용했다.
나처럼 dic을 만드는 것보다 그 자체를 class로 만들면 더 좋을 것 같다!
반응형
'알고리즘 | Algorithm' 카테고리의 다른 글
좌표평면 위의 직사각형 면적 구하기 - python (0) | 2022.05.25 |
---|---|
프로그래머스 | 2022 KAKAO BLIND RECRUITMENT > k진수에서 소수 개수 구하기 - 파이썬 (0) | 2022.04.13 |
프로그래머스 | 2022 KAKAO BLIND RECRUITMENT> 신고 결과 받기 (0) | 2022.04.10 |
[LeetCode 리트코드] Longest Palindromic Substring | Python3 파이썬 (0) | 2021.02.15 |
[LeetCode 리트코드] Max Number of K-Sum Pairs, python (0) | 2021.01.18 |