프로그래머스 : 주차 요금 계산 (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.)