코딩/프로그래머스 lv2

[프로그래머스] 주차 요금 계산 - 파이썬

코딩 코딩 코오딩 2022. 3. 21. 20:14

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

def cal_time(time):
    minute = 60*int(time[0:2]) + int(time[3:])
    return minute

def solution(fees, records):
    answer = []
    time, b_money, cut_time ,t_money = fees
    
    parking = {}
    car_info = {}
    for i in range(len(records)):
        car_info[records[i][6:10]] = 0
        parking[records[i][6:10]] = 0
    for i in range(len(records)):
        if "IN" == records[i][11:13]:
            parking[records[i][6:10]] = records[i][0:5]
        else:
            car_info[records[i][6:10]] += cal_time(records[i][0:5]) - cal_time(parking[records[i][6:10]])
            parking[records[i][6:10]] = 0
    
    
    for car_num in parking:
        if parking[car_num] != 0:
            car_info[car_num]+=cal_time('23:59')- cal_time(parking[car_num])
    
    
    for car_num in car_info:
        
        if car_info[car_num] <= time:
            car_info[car_num] = b_money
        else:
            if (car_info[car_num]- time)%cut_time != 0:
                
                car_info[car_num] = b_money + (((car_info[car_num] - time)//cut_time)+ 1)* t_money
            else:
                car_info[car_num] = b_money + ((car_info[car_num] - time)//cut_time)* t_money
    car_info= sorted(car_info.items())
    for i in range(len(car_info)):
        answer.append(car_info[i][1])
    return answer

올만에 파이썬이다. 문제는 쉽다고 생각했지만 문제 하나하나 조건이 조금 생각하는게 까다로웠다

알고리즘 보다는 구현에 집중된 문제이다. 딕셔너리를 잘사용하면 좋은 문제들이 많다.

특히 문자열을 요구하는 문제에서

그리고 나는 문자열을 나눌때 슬라이스를 했는데

: 을 스플릿해서 푸는 방법도 있다.

반응형