sm 기술 블로그
주차 요금 계산(2022 KAKAO BLIND RECRUITMENT) - 파이썬 본문
import math
def feesCal(fees, time):
if(time < fees[0]):
return fees[1]
return fees[1] + math.ceil(((time - fees[0]) / fees[2])) * fees[3]
def timeCal(recordsSplit):
totalTime = dict()
for i in recordsSplit:
tmp = list(map(int, i[0].split(":")))
if(i[2] == "IN"):
try:
totalTime[i[1]][1] += (tmp[0]*60 + tmp[1])
totalTime[i[1]][2] = 1
except:
totalTime[i[1]] = [0,(tmp[0]*60 + tmp[1]), 1]
else :
totalTime[i[1]][0] += abs(totalTime[i[1]][1] - (tmp[0]*60 + tmp[1]))
totalTime[i[1]][1] = 0
totalTime[i[1]][2] = 0
for j in totalTime:
if(totalTime[j][2] == 1):
totalTime[j][0] += abs(totalTime[j][1] - (23*60 + 59))
totalTime[j][1] = 0
totalTime[j][2] = 0
return sorted(totalTime.items())
def solution(fees, records):
answer = []
recordsSplit = list(i.split(" ") for i in records)
classification = timeCal(recordsSplit)
for i in classification:
answer.append(feesCal(fees, i[1][0]))
return answer
문제요약
주차 요금을 구하자.
설명
문제를 딕셔너리 접근으로 많이해서.. 잘푸는건지는 모르겠다.
뭐 맞으면 됐겠지...
시간을 뽑아내는 메소드
def timeCal(recordsSplit):
totalTime = dict()
for i in recordsSplit:
tmp = list(map(int, i[0].split(":")))
if(i[2] == "IN"):
try:
totalTime[i[1]][1] += (tmp[0]*60 + tmp[1])
totalTime[i[1]][2] = 1
except:
totalTime[i[1]] = [0,(tmp[0]*60 + tmp[1]), 1]
else :
totalTime[i[1]][0] += abs(totalTime[i[1]][1] - (tmp[0]*60 + tmp[1]))
totalTime[i[1]][1] = 0
totalTime[i[1]][2] = 0
for j in totalTime:
if(totalTime[j][2] == 1):
totalTime[j][0] += abs(totalTime[j][1] - (23*60 + 59))
totalTime[j][1] = 0
totalTime[j][2] = 0
return sorted(totalTime.items())
-1-
["00:00 1234 IN"]
다음과 같이 입력이 되기 때문에 split으로 쪼개주었고
시간은 : 을 기준으로 쪼개주었다.
-2-
분단위로 계산하기 위해서 시간에는 * 60을 해주었다.
-3-
딕셔너리에 다음과 같이 저장 할 것이다.
{"1234" : [전체시간, 입차시간, 입차여부] }
입차여부에서
입차 : 1
출차 : 0
으로 처리해주었다.
전체시간과 입차시간을 따로 둔 이유는
출차를 했을 때 절대값(입차 - 출차)이고 전체시간에 더해주기 위해서이다.
-4-
결과를 보면 차량번호 순으로 결과가 출력되는것을 볼 수 있다.
때문에 sort를 통해 오름차순 정렬을 진행하였다.
요금 계산 메소드
def feesCal(fees, time):
if(time < fees[0]):
return fees[1]
return fees[1] + math.ceil(((time - fees[0]) / fees[2])) * fees[3]
기본 시간 이내이면 기본요금 그게 아니라면 문제에 나와있는대로 작성해 주었다.
솔루션 메소드
def solution(fees, records):
answer = []
recordsSplit = list(i.split(" ") for i in records)
classification = timeCal(recordsSplit)
for i in classification:
answer.append(feesCal(fees, i[1][0]))
요금, 시간 메소드를 연결 시켜준 것 이다.
'문제 > 프로그래머스_파이썬' 카테고리의 다른 글
오픈채팅방 (2019 KAKAO BLIND RECRUITMENT) - 파이썬 (0) | 2022.10.22 |
---|---|
압축(2018 KAKAO BLIND RECRUITMENT) - 파이썬 (0) | 2022.10.21 |
k진수에서 소수 개수 구하기(2022 KAKAO BLIND RECRUITMENT) - 파이썬 (0) | 2022.10.18 |
[1차] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT) - 파이썬 (0) | 2022.10.17 |
튜플 (2019 카카오 개발자 겨울 인턴십) - 파이썬 (0) | 2022.10.10 |
Comments