ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 주차 요금 계산
    Algorithm/프로그래머스 2022. 11. 4. 15:38

    1. 문제 📚

    2. 입출력 예 📋

    3. 알고리즘 ✅

    1. dict 형태로 차번호를 키로 두어 정리

    2. 출차 시간이 없을 경우 23:59으로 넣어줘야 함 -> 각 정리 후 len()이 다르면 23:59 추가

    3. 누적시간 계산 후 주차요금 계산

    4. 소스코드 💻

    import math
    
    # 누적 시간 계산
    def cal_time(in_time, out_time):
    
        in_time = list(map(int, in_time.split(':')))  # [22, 59]
        out_time = list(map(int, out_time.split(':')))  # [23, 59]
    
        # 시가 더 클 경우
        if out_time[0] > in_time[0]:
            out_time[0] -= 1
            out_time[1] += 60
    
        return abs(in_time[0] - out_time[0]) * 60 + abs(in_time[1] - out_time[1])
    
    def solution(fees, records):
        answer = []
        in_dict = {}
        out_dict = {}
        
        # 1. dict 형태로 정리
        for record in records:
            time, car, in_out = record.split()
            if in_out == 'IN':
                if car not in in_dict:
                    in_dict[car] = [time]
                else:
                    in_dict[car].append(time)
            elif in_out == 'OUT':
                if car not in out_dict:
                    out_dict[car] = [time]
                else:
                    out_dict[car].append(time)
    	
        # 2. 출차 시간이 없을 경우 23:59 추가
        for key in in_dict:
            if key not in out_dict:
                out_dict[key] = ['23:59']
    
            while len(in_dict[key]) != len(out_dict[key]):
                out_dict[key].append('23:59')
    	
        # 3. 출력은 주차번호 순대로
        sort_dict = sorted(in_dict)
        
        for key in sort_dict:
            time = 0  # 누적 주차 시간
    
            while in_dict[key] and out_dict[key]:
                in_time = in_dict[key].pop()
                out_time = out_dict[key].pop()
    
                time += cal_time(in_time, out_time)
    
            if time <= fees[0]:
                answer.append(fees[1])  # 기본요금
            elif time > fees[0]:
                fee = fees[1] + math.ceil(((time - fees[0]) / fees[2])) * fees[3]
                answer.append(fee)
    
        return answer

    'Algorithm > 프로그래머스' 카테고리의 다른 글

    [Java] H-index  (0) 2023.04.11
    [Java] 카펫  (0) 2023.04.04
    [Python] 단어 변환  (0) 2022.10.20
    [Python] 입국심사  (0) 2021.06.03
    [Python] 로또의 최고 순위와 최저 순위  (0) 2021.05.05

    댓글

Designed by Tistory.