반응형
출처
https://programmers.co.kr/learn/courses/30/lessons/92341
문제
제한사항
풀이 및 코드
문제 조건대로 따라 구현만 하면 되는 문제이다.
문자열을 어떻게 처리하느냐에 따라 스타일이 달라질 것 같다.
각각의 차번호를 key로 , 입/출차 시간을 분단위로 바꾼 값을 value로 쓰기 위해 defaultdict를 사용했다.
- 차량 번호 : [ 입출차 시간 ] 형식으로 담을 defaultdict 선언
- 차량 번호가 작은 자동차부터 return하라는 조건에 따라 차량 번호를 기준으로 정렬
- YY:MM 형식으로 된 시간을 분단위로 변환하여 삽입
- IN(입차)일 경우, -를 붙이고
- OUT(출차)일 경우, 그대로 삽입
- dictionary를 돌면서 주차 요금 계산, 이 때 value가 홀수개면(마지막 출차 기록이 없으면) 23:59분을 OUT으로 간주하고 계산
import math
from collections import defaultdict
def solution(fees, records):
dTime, dFee, uTime, uFee = fees[0], fees[1], fees[2], fees[3]
parkingDict = defaultdict(list)
records.sort(key=lambda x:x.split(" ")[1]) // 차 번호를 기준으로 정렬
for record in records:
ioTime, car, io = record.split(" ")
hour, minute = map(int, ioTime.split(":"))
if io == "IN":
parkingDict[car].append(-(hour*60 + minute))
else:
parkingDict[car].append(hour*60 + minute)
answer = []
for carNum in parkingDict:
if len(parkingDict[carNum])%2 == 0:
pTime = sum(parkingDict[carNum])
else: // 출차 기록이 없을 경우 23:59분을 출차로 간주
pTime = sum(parkingDict[carNum]) + (23 * 60 + 59)
if pTime <= dTime:
answer.append(dFee)
else:
answer.append(dFee + math.ceil((pTime - dTime)/uTime) * uFee)
return answer
'기술 > Problem Solving' 카테고리의 다른 글
[Programmers] k진수에서 소수 개수 구하기 (0) | 2022.01.17 |
---|---|
[Programmers] 신고 결과 받기 (0) | 2022.01.16 |
[baekjoon] 4900번 7 더하기 (0) | 2021.07.27 |
[baekjoon] 1263번 시간 관리 (0) | 2021.07.23 |
[baekjoon] 1706번 크로스워드 (0) | 2021.07.17 |