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

 

프로그래머스

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

programmers.co.kr

 

코드

IN = "IN"
OUT = "OUT"
day_to_minute = "23:59"

def solution(fees, records):
    answer = []
    basic_time, basic_fee, per_time, per_fee = fees
    total_time_record = dict()
    in_out_record = dict()
    
    def clock_to_minute(clock):
        h, m = map(int, clock.split(':'))
        minute = 60 * h + m
        return minute
    
    for record in records: 
        clock, car_num, entrance_type = record.split()
        
        if entrance_type == IN:
            in_out_record[car_num] = clock
            
        else:
            in_time = in_out_record[car_num]
            
            if total_time_record.get(car_num, False):
                total_time_record[car_num] += (clock_to_minute(clock) - clock_to_minute(in_time))
            else:
                total_time_record[car_num] = (clock_to_minute(clock) - clock_to_minute(in_time))
            del in_out_record[car_num]
            
    for car_num in in_out_record.keys():
        in_time = in_out_record[car_num]
        if total_time_record.get(car_num, False):
                total_time_record[car_num] += (clock_to_minute(day_to_minute) - clock_to_minute(in_time))
        else:
            total_time_record[car_num] = (clock_to_minute(day_to_minute) - clock_to_minute(in_time))

    return answer

 

풀이

  • 딕셔너리를 사용해서 차 번호마다 주차된 시간을 계산해줍니다.
  • 입차 기록은 있는데 출차 기록이 없을 경우에는 23:59로 출차 처리해줘서 시간을 더해줍니다.
  • dict.get(key, value if key is not exist) 를 이용해서 딕셔너리에 값이 존재하는지 확인한 뒤 더해줄지 값을 생성할지 결정합니다.
    • 딕셔너리에 존재하지 않는 키에 대해 += 연산을 하면 KeyError가 발생하기 떄문
개발자 성현