소스코드
def solution(fees, records):
answer = []
parking = dict()
feeTotal = dict()
for record in records:
recordToList = record.split(" ")
if recordToList[2] == "IN":
parking[recordToList[1]] = recordToList[0]
elif recordToList[2] == "OUT":
if recordToList[1] in feeTotal :
feeTotal[recordToList[1]] += calculateTime(parking[recordToList[1]],recordToList[0])
else :
feeTotal[recordToList[1]] = calculateTime(parking[recordToList[1]],recordToList[0])
del parking[recordToList[1]]
for remain in parking :
if str(remain) in feeTotal :
feeTotal[str(remain)] += calculateTime(parking[remain],"23:59")
else :
feeTotal[str(remain)] = calculateTime(parking[remain],"23:59")
feee = sorted(feeTotal)
for fee in feee:
answer.append(calFee(feeTotal[fee],fees))
return answer
def calculateTime(inTime,outTime):
inTimeHour = inTime.split(':')
outTimeHour = outTime.split(':')
inMin = int(inTimeHour[0]) * 60 + int(inTimeHour[1])
outMin = int(outTimeHour[0]) * 60 + int(outTimeHour[1])
return outMin - inMin
def calFee(time,fees):
if time < fees[0]:
return fees[1]
else :
if (time - fees[0]) % fees[2] != 0 :
feeee = fees[1] + ((time - fees[0])//fees[2]+1) * fees[3]
else :
feeee = fees[1] + ((time - fees[0])//fees[2]) * fees[3]
return feeee
알고리즘
주어진 입력값을 가지고 class를 만들지 아님 위와 같이할지 고민이었다.
위와 같이 딕셔너리를 사용한 것은 값을 찾을 때 조금이라도 시간을 줄이기 위해서였다.
1. 차량 번호는 고유하므로 key, 시간은 value로 설정해주기
2. 만약 입차 상태였으면 새롭게 추가, 출차 상태면 요금정산에 추가(차량번호 : 시간) 후 출차
3. 입차인데 나간 차가 없으면 23:59로 출차처리
4. 차량번호가 낮은 순서대로 정렬 후 fees에 있는 기준대로 정산
'Coding test' 카테고리의 다른 글
[백준/1931/파이썬] 회의실 - Greedy (2) | 2023.11.27 |
---|---|
[백준/17298/파이썬] 오큰수 - stack (2) | 2023.11.26 |
[프로그래머스/k진수에서 소수 개수 구하기/파이썬] (1) | 2023.11.22 |
[1912/백준/파이썬] 연속합 - DP (0) | 2023.11.21 |
[11053/백준/파이썬] 가장 긴 증가하는 부분 수열 - DP (1) | 2023.11.20 |