https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import math
def solution(fees,records):
garage = {} # 주차장
fee = {} # 요금
times = {} # 총 이용시간 누적합
# 시간 누적합
for record in records:
info = list(record.split())
if info[2] == "IN": # 들어옴! 시간 갱신
garage[info[1]] = info[0]
else: # 나감!
hour = int(info[0][0:2]) - int((garage[info[1]])[0:2])
if int(info[0][3:]) - int(garage[info[1]][3:]) < 0:
hour -= 1
minute = 60 - (int(garage[info[1]][3:]) - int(info[0][3:]))
else:
minute = int(info[0][3:]) - int(garage[info[1]][3:])
total_time = hour * 60 + minute
if info[1] in times.keys(): # 2회차면 누적
times[info[1]] += total_time
else: # 1회차면 생성
times[info[1]] = total_time
garage[info[1]] = 0 # 나간거 표시
# 입차 후 출차내역 없음 -> 23:59에 출차된 것으로 간주
for g in garage.keys():
if garage.get(g) != 0:
hour = 23 - int(garage.get(g)[0:2])
minute = 59 - int(garage.get(g)[3:])
total_time = hour * 60 + minute
if g in times.keys():
times[g] += total_time
else:
times[g] = total_time
# 요금계산
for time in times.keys():
if times[time] <= fees[0]: # 기본요금이면
fee[time] = fees[1]
else: # 초과요금
fee[time] = fees[1] + (math.ceil((times[time] - fees[0]) / fees[2])) * fees[3]
ans = []
fin = sorted(fee)
for f in fin:
ans.append(fee[f])
return ans
- 너무 복잡하게 풀었네...내가봐도 잘 모르겠다...
- 딕셔너리를 3개나 만들어서 풀려고 한 게 잘못이었던 듯 하다...
- 나가는 순간 요금계산하려고 막 삽질하느라 상당히 오래걸린 문제...
'프로그래머스' 카테고리의 다른 글
프로그래머스 43236. 징검다리 (0) | 2024.11.03 |
---|---|
프로그래머스 42586. 기능개발 (0) | 2023.11.15 |
프로그래머스 72413. 합승 택시 요금 (0) | 2023.11.08 |
프로그래머스 42898. 등굣길 (0) | 2023.11.07 |
프로그래머스 42883. 큰 수 만들기 (0) | 2023.11.02 |