본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[프로그래머스] Lv.2 주차 요금 계산 - Python

by chaemj97 2022. 6. 16.
728x90

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

 

코딩테스트 연습 - 주차 요금 계산

[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]

programmers.co.kr


  • 생각
    • 요금을 일괄 계산!!
    • 차량번호가 작은 순으로 요금 return
      • 차량 번호가 작은 순으로 + 시간 순으로 정렬
      • 차가 들어오거나 나가는 시간 배열로 만들기
      • 차량 주차 시간 구하기
      • 요금 구하기
  • 코드
import math

# hh:mm을 minutes로 바꾸기
def changeToMinutes(time):
    H,M = map(int,time.split(':'))
    return H*60 + M

def solution(fees, records):
    # 차량 번호가 작은 자동차부터
    records.sort(key = lambda x:x[6:10])
    
    # 차 번호에 [time]
    cars = {}
    for record in records:
        time, car_num, inout = record.split()
        time_minutes = changeToMinutes(time)
        # 들어온 적 없는 차량?
        if car_num not in cars:
            cars[car_num] = [time_minutes]
        else:
            cars[car_num].append(time_minutes)
            
    park_time = []
    last_time = 23*60 + 59
    # 차량 주차 시간 구하기
    for car in cars.values():
        parking_time = 0
        for i in range(0,len(car),2):
            try:
                parking_time += car[i+1]-car[i]
            # 그날 출차 되지 않았다면
            except:
                parking_time += last_time - car[i]
        park_time += [parking_time]

    money = []
    # 주차 요금 계산
    for m in park_time:
        # 기본 시간보다 적게 이용시 기본요금만
        if m <= fees[0]:
            money += [fees[1]]
        else:
            money += [fees[1] + math.ceil((m-fees[0])/fees[2])*fees[3]]
            
    return money
728x90
반응형

댓글