프로그래머스 : 주차 요금 계산 (python)
2022 KAKAO BLIND RECRUITMENT 주차 요금 계산
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/92341
문제가 길어 문제를 읽고 이해한 후, 밑의 글을 읽으면 좋을거 같습니다.
전체 코드
import math
def dateToMinutes(date):
h, m = map(int, date.split(':'))
return h*60 + m
def solution(fees, records):
answer = []
# 기본 시간, 기본 요금, 단위 시간, 단위 요금 순
dt, df, ut, uf = fees
dic = dict()
for r in records:
time, number, history = r.split()
number = int(number)
if number in dic:
dic[number].append([dateToMinutes(time), history])
else:
dic[number] = [[dateToMinutes(time), history]]
rList = list(dic.items())
rList.sort(key=lambda x : x[0])
for r in rList:
t = 0
for rr in r[1]:
if rr[1] == "IN":
t -= rr[0]
else:
t += rr[0]
if r[1][-1][1] == "IN":
t += dateToMinutes('23:59')
if t <= dt:
answer.append(df)
else:
answer.append(df + math.ceil((t-dt) / ut) * uf)
return answer
코드 작성시 고민했던 점
- 반복적으로 처리하는 부분은 무엇일까
- 문제에서 차량이 입차되고 출차되는 시각을
HH:MM형식으로 주어진다. 계산을 쉽게 하기위해 dateToMinutes 함수를 통해 분 단위로 환산하여 반환해주었다.
ex) "05:34" → 334
def dateToMinutes(date):
h, m = map(int, date.split(':'))
return h*60 + m
- 사용할 자료형에 대한 고민
- 단순히 리스트를 차량 번호를 조회하면 리스트를 탐색하면서 차량 번호를 매칭하는 별도의 조건문이 필요하므로, 차량 번호 조회시 한번에 그 차량의 입/출차 내역을 조회할 수 있도록 dictionary 자료형을 사용하였다.
dic = dict()
for r in records:
time, number, history = r.split()
number = int(number)
if number in dic:
dic[number].append([dateToMinutes(time), history])
else:
dic[number] = [[dateToMinutes(time), history]]
출력 : {5961: [[334, 'IN'], [479, 'OUT'], [1379, 'IN'], [1380, 'OUT']], 0: [[360, 'IN'], [394, 'OUT'], [1139, 'IN']], 148: [[479, 'IN'], [1149, 'OUT']]}
- dictionary 자료형 사용시 인덱스 접근과 sort() 함수를 사용하지 못하기 때문에, 문제 출력 조건에서 요구하는
차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.를 만족시키기 어려웠다. 따라서 문제 출력 조건 만족하기 위해 dictionary를 (key, value) 튜플 형태의 list로 변환 후, 차량번호 기준으로 sort()를 하였다.
rList = list(dic.items())
rList.sort(key=lambda x : x[0])
출력 : [(0, [[360, 'IN'], [394, 'OUT'], [1139, 'IN']]), (148, [[479, 'IN'], [1149, 'OUT']]), (5961, [[334, 'IN'], [479, 'OUT'], [1379, 'IN'], [1380, 'OUT']])]
→ 사실상 차량 번호는 문제를 풀기 위해 차량 번호에 따른 순서가 중요하지, 차량번호가 "0000"이든 "0"이든 상관 없기 때문에 string을 int로 변환하여 sort()를 했다.
- 입차 이후 출차된 내역이 없는 경우 처리
- 입차 이후 출차된 내역이 없다라는 것은 각 입/출차 내역의 마지막 내역이 입차(IN)로 끝나는 것이기 때문에, 이 경우 누적 주차 시간 계산할 때 "23:59"를 분으로 환산한 만큼 더해주어 계산했다.
for r in rList:
# 생략
...
if r[1][-1][1] == "IN":
t += dateToMinutes('23:59')
결과
Author And Source
이 문제에 관하여(프로그래머스 : 주차 요금 계산 (python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minnseong/프로그래머스-주차-요금-계산저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)