상세 컨텐츠

본문 제목

[코테] 프로그래머스 Lv2. 파이썬 주차 요금 계산

코테

by Graceful_IT 2024. 1. 1. 18:55

본문

https://school.programmers.co.kr/learn/courses/30/lessons/92341

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.

 

 

 

처음으로 반복문을 통해 records를 훑으며 차량번호를 중복없이 리스트에 저장한 후 sort() 정렬을 하였다. 

그후 차량번호에 해당하는 주차내역을 하나의 array, 'check'에 저장했다.

 

'check'와 index, 'cnt'를 활용하여 IN과 OUT의 시간 차이를 계산했다. 만약에 마지막 하나의 내역만 남아있는 경우에는 시간 차이를 계산하는 함수에 "23:59"를 넣어주었다. 짝수의 주차내역만 저장되어 있는 경우는 if문을 통해 걸러낼 수 있음으로 따로 경우의 수를 나누지는 않았다.

 

시간차이 계산함수 'time_calculate'는 chat gpt를 통해 알게 된 from datetime  import datetime 라이브러리를 사용하여 분을 계산할 수 있었다.

 

그 후 총가격을 출력하는 함수 'price'를 활용하여 answer를 return하였는데, 이때 (math.ceil(float(minute)/fees[2]))에 해당하는 라이브러리 import math를 가져왔다. 반올림하여 단위시간에 해당하는 가격을 더해야했기 때문이다.

 

import math
from datetime import datetime

def time_calculate(start,end):
    time_format = "%H:%M"
    time1 = datetime.strptime(start, time_format)
    time2 = datetime.strptime(end, time_format)

    time_difference = time2 - time1

    difference_in_minutes = int(time_difference.total_seconds() / 60)
    return difference_in_minutes
    
def price(minutes,fees):
    finalPrice=0
    finalCalculate=[]
    
    for minute in minutes:
        finalPrice=0
        if minute>fees[0]:
            minute-=fees[0]
            finalPrice+=fees[1]
            finalPrice+=(math.ceil(float(minute)/fees[2]))*fees[3]
            
        else:
            finalPrice+=fees[1]
            
        finalCalculate.append(finalPrice)
    return finalCalculate
            
    
def solution(fees, records):
    answer = []
    cars=[]
    
    for i in records:
        check=i.split(" ")
        if check[1] not in cars:
            cars.append(check[1])
    cars.sort()
    result=[0]*len(cars)
    
    
    for i in range(len(cars)):
        check=[]
        sums=0
        cnt=0
        for record in records:
            if cars[i] in record:
                confirm=record.split(" ")
                check.append(confirm[0])
        while True:
            if len(check)>cnt and len(check)>cnt+1:
                sums+=time_calculate(check[cnt],check[cnt+1])
                cnt+=2
            elif len(check)==cnt+1:
                sums+=time_calculate(check[cnt],"23:59")
                break
            else:
                break
        answer.append(sums)
    answer=price(answer,fees)        
                        
        
    return answer

관련글 더보기