[프로그래머스] 주차 요금 계산

yunu·2022년 3월 4일
0
post-thumbnail

출처: 프로그래머스 코딩 테스트 연습, [프로그래머스] 주차 요금 계산

풀이

1. '??:??' 이런 형식의 시간문자열 분으로 바꾸는 메서드 구현
2. 해시테이블을 이용해서 차량이 주차한 시간 측정, { key : [시작시간, 총 시간], ... } IN, OUT을 통해 차량이 주차장에 들어오는지 판단하고 들어오고 있다면 해시에서 차량번호를 찾아가 시작시간을 초기화해준다. 차량이 주차장을 나간다면 해시에서 나간시간에서 저장해둔 시작시간을 뺀 값을 기존의 총 시간에 추가한다. 시작시간에는 -1으로 초기화하여 차량이 주차장에 없음을 표시한다.
3. 차량번호가 작은 순서대로 출력해야하므로 해시의 키를 오름차순으로 정렬한다.
4. 만약 입/출차기록을 모두 마쳤음에도 시작시간에 -1이 아닌 값이 있다면 '23:59'에 출차한 경우이므로 이 경우에 기존의 총 시간에 추가해준다.
5. 기본 시간보다 클 때, 작을 때를 나누어 주차요금을 계산해주면 된다.

코드

def cal_min(str_num):
    str_hour, str_min = str_num.split(':')
    return int(str_hour) * 60 + int(str_min)

def solution(fees, records):
    """
    차량번호가 작은 자동차부터 출력
    in -> flag = 0 : False
    out -> flag = 1 : True
    """
    d_min, d_price, u_min, u_price = fees
    answer = []
    dic = {}
    for record in records:
        rec = record.split(' ')
        r_min, r_num, r_flag = cal_min(rec[0]), int(rec[1]), len(rec[2]) - 2
        if not r_flag:
            if r_num not in dic:
                dic[r_num] = [r_min, 0] # 시작시간, 총 시간
            else:
                dic[r_num][0] = r_min
        else:
            time = r_min - dic[r_num][0]
            dic[r_num][0] = -1
            dic[r_num][1] += time
    
    for num in sorted(dic):
        if dic[num][0] != -1:
            time = cal_min('23:59') - dic[num][0]
            dic[num][1] += time
        if dic[num][1] > d_min:
            answer.append(d_price + ((dic[num][1] - d_min + u_min - 1) // u_min) * u_price)
        else:
            answer.append(d_price)
    
    return answer
profile
rip

0개의 댓글