Algorithm

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

moguogu 2026. 1. 11. 00:53

1. 문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

2. 알고리즘

더보기

1. 시뮬레이션 문제로 자료구조를 잘 이용하여 사용

2. 출차 입차 기록 records를 string을 space 기준 파싱 

3. 차량번호 기준 오름차순으로 값을 반환해야 하므로 정렬 (기본적으로 records가 출입차 기록이 오름차순으로 됨)

4. 차량 번호당 얼마나 있었는지 총합 계산이 필요하여 dict에 저장 

5. dict에 출입차 기록 조회 하는 과정에 출차 기록이 없는경우 23:59 추가

6. 시간 계산하여 fees 조회 하여 연산 및 반환  

3. 코드 

import math
def time_cal(enter, out):
    in_hour, in_minute = map(int, enter.split(':'))
    out_hour, out_minute = map(int, out.split(':'))

    min_gap = out_minute - in_minute
    hour_gap = out_hour - in_hour
    
    if min_gap < 0: # 음수분 인 경우 내림 
        hour_gap -=1 
        min_gap = 60 + min_gap
        
    return hour_gap * 60 + min_gap  
   
def solution(fees, records):
    answers = []
    record = [] 
    for val in records: 
        record.append(val.split(' '))
    record.sort(key=lambda x: (x[1], x[0])) #차량 번호 오름차순 / 시간 내림 차순 정렬

    record_dict = {}
    for time, number, status in record:
        if number not in record_dict: 
            record_dict[number] = [[time, status]]
        else: 
            record_dict[number].append([time,status])
    
    for key, val in record_dict.items():
        time_gap = 0
        if len(val)%2 != 0: #출차 기록이 없는 경우 직접 추가 
            val.append(['23:59', 'OUT'])
        for i in range(0,len(val)-1): 
            enter, status1 = val[i]
            out, status2 = val[i+1]
            if status1 == 'IN' and status2 == 'OUT': #출차 시간이 있는 경우 
                time_gap += time_cal(enter, out)
        
        total_fee = fees[1] #기본 요금 설정 
        if time_gap > fees[0]: #기본 시간보다 더 이용한 경우 
            total_fee += math.ceil((time_gap - fees[0]) / fees[2]) * fees[3] #단위시간당 단위요금 계산  
        else: #기본 시간 미만 이용
            pass 
        answers.append(total_fee)
        
    return answers

'Algorithm' 카테고리의 다른 글

[프로그래머스] 방금그곡  (0) 2026.01.19
[프로그래머스] 미로 탈출  (0) 2026.01.10
[프로그래머스] 단어 변환  (0) 2026.01.07
[프로그래머스] 소수 찾기  (1) 2026.01.07
[프로그래머스] 타겟 넘버  (0) 2026.01.06