코딩테스트
[파이썬(python)] 2022 카카오 블라인드 공채 주차 요금 계산
고후
2022. 3. 9. 18:09
https://programmers.co.kr/learn/courses/30/lessons/92341
풀었지만 복잡하게 푼 문제.. 조금 간단히 풀 방법을 찾아봐야겠다.
처음 작성한 코드
from datetime import datetime
def solution(fees, records):
answer = []
car_records = [] #차량별로 번호, 입차, 출차 시간
car = [] #차량 번호, 누적 주차시간
carnum = []
for str in records:
hour, num, inout = str.split()
if inout == 'IN':
car_records.append([num, hour, ''])
else:
for i in range(len(car_records)):
if car_records[i][0] == num and not car_records[i][2]:
car_records[i][2] = hour
if num in carnum:
continue
carnum.append(num)
for i in range(len(car_records)):
if not car_records[i][2]:
car_records[i][2] = '23:59'
car_records.sort(key = lambda x : x[0])
carnum.sort()
for i in range(len(car_records)):
exist = False
tin = datetime.strptime(car_records[i][1],"%H:%M")
tout = datetime.strptime(car_records[i][2], "%H:%M")
for j in range(len(car)):
if car[j][0] == car_records[i][0]:
car[j][1] += (tout - tin).seconds//60
exist = True
continue
if exist == False:
car.append([car_records[i][0], (tout - tin).seconds//60])
for i in range(len(car)):
if car[i][1] <= fees[0]:
answer.append(fees[1])
continue
q, r = divmod((car[i][1]-fees[0]), fees[2])
if r == 0:
answer.append(fees[1] + q*fees[3])
continue
q += 1
answer.append(fees[1]+q*fees[3])
return answer
수정한 코드
차량별로 입차시간과 출차시간을 저장해두던 것을
입차 시간만 일시적으로 저장해둔다음에
차량이 출차할 때 입차시간과의 차이를 이용해서 주차시간을 더해주는 방법으로 바꿔봤다.
from datetime import datetime
def solution(fees, records):
car = {} #차량 번호, 누적 주차시간
car_in = {} #차량 번호, 입차 시간 일시적으로 저장
answer = []
for r in records:
if r.split()[1] not in car:
car[r.split()[1]] = 0
car_in[r.split()[1]] = ''
n = len(car)
for r in records:
if r.split()[2] == "IN":
car_in[r.split()[1]] = r.split()[0]
else:
tin = datetime.strptime(car_in[r.split()[1]],"%H:%M")
tout = datetime.strptime(r.split()[0], "%H:%M")
car[r.split()[1]] += (tout - tin).seconds//60
car_in[r.split()[1]] = '' #입차 시간 초기화
for key in car_in:
if car_in[key] != '':
#나간 시간이 나오지 않으면
tin = datetime.strptime(car_in[key],"%H:%M")
tout = datetime.strptime("23:59", "%H:%M")
car[key] += (tout - tin).seconds//60
car_in[key] = '' #입차 시간 초기화
car = sorted(car.items(), key = lambda x:x[0])
for c, time in car:
count = 0
if time < fees[0]:
answer.append(fees[1])
else:
q,r = divmod(time-fees[0], fees[2])
if r != 0:
q += 1
count = fees[1] + q*fees[3]
answer.append(count)
return answer