나의 개발일지

[프로그래머스] [KAKAO] Lv.2 주차 요금 계산 [Python, 파이썬] 본문

프로그래머스

[프로그래머스] [KAKAO] Lv.2 주차 요금 계산 [Python, 파이썬]

YoonJuHan 2023. 4. 13. 23:02
  • 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92341
  • 2022 KAKAO BLIND RECRUITMENT 문제
  • 🔑 : 누적 주차 시간 구한 방법
  • 기본적으로 시간은 05:34 일 때, 5*60 + 36 = 336 분으로 만든다.
  • 같은 차량끼리, OUT 일 때 시간의 합 - IN 일 때 시간의 합 = 누적 주차 시간이 구해진다.
  • 그래서 IN 이면은 시간을 분으로 변환해 준 후 빼주는 작업을 하고
  • OUT 이면 시간을 분으로 변환해 준 후 더해주는 작업을 했다.
  • 추가로 마지막까지 나가지 않는 차량에 대해서는 요금 계산할 때 확인을 하고
  • (23시59분 = 1439분)을 더해주고 요금 계산을 진행

 

import math
def solution(fees, records):
    answer = []
    기본시간, 기본요금, 단위시간, 단위요금 = fees[0], fees[1], fees[2], fees[3]
    주차정보 = []
    차량번호 = {}

    for i in records:   # 주차 기록들을 순회
        x = i.split()   # "05:34 5961 IN" 형태를 ['05:34', '5961', 'IN']으로 변경
        주차정보.append(x)  # 주차정보 리스트에 ['시간', '차번호', 'IN/OUT'] 추가
        if x[1] not in 차량번호:    # 차량번호 딕셔너리에 안들어간 번호면
            차량번호[x[1]] = [0, 0] # '차량번호' : [0, 0] 쌍의 key : value 생성
    차량번호 = dict(sorted(차량번호.items()))   # 완성된 차량번호 딕셔너리를 정렬

    # 누적 주차 시간(분) 구하기
    for 기록 in 주차정보:   # 위에서 만들어진 주차정보 리스트 순회
        if 기록[2] == 'IN':   # 기록 = ['시간', '차번호', 'IN/OUT']
            차량번호[기록[1]][0] -= (int(기록[0][:2]) * 60 + int(기록[0][3:])) # '차량번호' : [여기에, 0] 빼기
            차량번호[기록[1]][1] = 1 # '차량번호' : [0, 여기를] 주차중이면 1로 설정
        elif 기록[2] == 'OUT':
            차량번호[기록[1]][0] += (int(기록[0][:2]) * 60 + int(기록[0][3:]))  # '차량번호' : [여기에, 0] 더하기
            차량번호[기록[1]][1] = 0 # '차량번호' : [0, 여기를] 나갔으면 0으로 설정

    # 주차 시간 만큼의 요금 구하기
    for key in 차량번호:    # 차량번호 : [계산된 분, 0 or 1] 쌍의 딕셔너리를 순회
        if 차량번호[key][1] == 1:   # 23시59분까지 안나간 차
            차량번호[key][0] += 1439    # (23시59분 = 1439분)을 더해준다.
            요금 = 기본요금 + math.ceil(((차량번호[key][0]-기본시간) / 단위시간)) * 단위요금
            if 요금 < 기본요금:     # 계산된 요금이 기본요금 보다 낮으면 기본요금 청구
                answer.append(기본요금)
            else : answer.append(요금)  # 아니면 계산된 요금 청구
        else:
            요금 = 기본요금 + math.ceil(((차량번호[key][0]-기본시간) / 단위시간)) * 단위요금
            if 요금 < 기본요금:
                answer.append(기본요금)
            else : answer.append(요금)

    return answer
Comments