728x90
programmers - 주차 요금 계산 |
https://school.programmers.co.kr/learn/courses/30/lessons/92341
상세 설명은 위의 링크를 참조하세요.
문제설명
입출력 예를 보면 바로 알 수 있듯이, 주차장의 차량 별 이용기록을 records 배열을 통해 받고 그 기록을 통해 각 차량 별 요금을 계산하는 문제이다.
사실 문제를 이해하는 것은 그렇게 어렵지않은데 이런 구현 문제는 쫌 꼼꼼하게 풀어야 시간을 줄일 수 있다.
위처럼 문제를 읽으면서, 대충 어떻게 풀어야할지 정리하면 정리한 내용을 토대로 구현할 수 있어서 헤매지않고 한번에 풀기 좋다.
주의해야할 조건은 출차시각이 없는 차량인데, 입차시각 체크할때 출차시각을 0으로 설정하는 방법을 통해 해결했다.
문제풀이코드
import math def solution(fees, records): #fees = [ 기본시간, 기본 요금, 단위 시간, 단위 요금 ] # dictionary 자료형 설정 arrival_time = {} departure_time = {} total_parking_time = {} total_parking_fee = {} # park record parsing for record in records: rec = record.split(',') rec = record.split(' ') # 시각 , 차량번호, 인아웃 내역 parsing cha_time = rec[0] cha_num = rec[1] inout = rec[2] if inout =='IN': arrival_time[cha_num] = cha_time #입차할때 출차시각 0으로 설정 departure_time[cha_num] = 0 elif inout == 'OUT': departure_time[cha_num] = cha_time # 이번 입출차때 이용한 주차시간 계산 in_time = arrival_time[cha_num].split(':') res1 = int(in_time[0]) * 60 + int(in_time[1]) out_time = departure_time[cha_num].split(':') res2 = int(out_time[0]) * 60 + int(out_time[1]) res3 = res2 - res1 if cha_num in total_parking_time: total_parking_time[cha_num] += res3 else: total_parking_time[cha_num] = res3 print("차량번호 >>" + cha_num +"의 현재 누적 주차시간 >> "+ str(total_parking_time[cha_num])) # 출차시간기록이 없는 차량 체크 for key,value in departure_time.items(): if value == 0: res2 = 23 * 60 + 59 in_time = arrival_time[key].split(':') print(in_time) res1 = int(in_time[0]) * 60 + int(in_time[1]) res3 = res2 - res1 print(key,res2,res1) if key not in total_parking_time: total_parking_time[key] = res3 else: total_parking_time[key] += res3 # 요금 계산하기 for key,value in total_parking_time.items(): print("차량번호 >>> "+key+"의 이용 시간 >>>"+str(value)) if value <= fees[0]: total_parking_fee[key] = fees[1] else: total_parking_fee[key] = fees[1] + math.ceil(((value-fees[0])/fees[2])) * fees[3] # 요금 계산하기 for key,value in total_parking_fee.items(): print(key,value) sorted_dict = sorted(total_parking_fee.items()) answer = [] for dic in sorted_dict: answer.append(dic[1]) return answer |
알게된 점
1. math 모듈의 ceil 메소드를 통해 소수 올림을 쉽게 할 수 있다.
2. 복잡해보이는 구현 문제는 바로 코드를 쓰지말고 메모장을 켜보자
728x90
'개인 공부 > 알고리즘 트레이닝' 카테고리의 다른 글
[python] programmers - 메뉴 리뉴얼 (0) | 2022.09.13 |
---|---|
[python] programmers - 오픈채팅방 (0) | 2022.09.12 |
[python] programmers - k진수에서 소수 개수 구하기 (0) | 2022.09.10 |
[python] programmers - 튜플 (1) | 2022.09.10 |
[python] programmers - 성격 유형 검사하기 (0) | 2022.09.06 |
댓글