시작하는 중
Python 프로그래머스 - 주차 요금 계산 본문
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
구현 문제이다. 지문을 잘 읽는 것이 중요하다.
1. 이런 문제는 입력값을 파싱해둬서 쓰기 쉽게 만들어두는 것이 중요하다. 배열을 잘 정리해두는 것도 중요하다!
2. 시간을 어떻게 다룰지도 생각해둬야한다. 나는 모든 단위를 분으로 맞췄다. 시간을 분으로 맞춘 것을 절대 분이라고 하겠다.
고려해야할 점
1. 차가 들어오는 번호를 구분하여 들어왔던 차인지를 생각해야한다.
2. 요금을 바로 계산할 것인지, 마지막에 계산할 것인지 생각해야한다. -> 마지막에 계산!
풀이
1. dct는 차량번호 : 주차한시간 을 쌍으로 갖는 딕셔너리, cars는 차량 번호이자 23:59까지 나가지 않는 차량을 알기 위함이다.
2. records를 순회
3.. record를 파싱하고 절대 분을 계산한다.
4. 만약, 들어오는 것에 대한 정보라면 cars에 번호를 append한다.
5. dct에서 번호가 이미 존재하지 않는다면 -> 절대 분을 -한 값으로 지정한다. 이유는 주차한 시간 = 나간시간 - 들어온 시간
5-1. 존재하면 지금 분에서 - 절대 분을 해준다.
6. 나가는 정보라면 dct의 차량번호를 +절대 분으로 더해주고, cars에서 해당 번호를 제거한다.
7. 모든 순회가 끝난 후, 나가지 않는 차량은 cars에 기록되어 있다. cars가 있는 동안 while문을 돌린다.
8. 23:59의 절대분을 구하고 23:59에 출차처리를 한다.
9. dct 순회
10. value에서 기본 요금에 대한 고정적인 절대 분을 뺀다.
11. value가 0보다 작거나 같다면, 기본 요금을 답에 append!
12. 아니고, value가 단위 시간으로 나눴을 때 딱 떨어지지 않는다면 단위 요금을 + 1만큼 더 내야하고
12-1. 딱 떨어진다면 단위 요금을 단위 시간을 기준으로 있던 만큼 더 내면 된다.
def solution(fees, records):
dct = {}
cars = []
answer = []
for record in records:
record = record.split()
tmp = list(map(int,record[0].split(':')))
minute = tmp[0] * 60 + tmp[1]
if record[2] == 'IN':
cars.append(record[1])
if not dct.get(record[1]):
dct[record[1]] = -minute
else:
dct[record[1]] += -minute
else:
dct[record[1]] += minute
cars.remove(record[1])
while cars:
minute = 23*60 + 59
car = cars.pop()
dct[car] += minute
for key, value in sorted(dct.items()):
value -= fees[0]
if value <= 0:
answer.append(fees[1])
else:
if value % fees[2] != 0:
answer.append(fees[1] + fees[3] * (value // fees[2] + 1))
else:
answer.append(fees[1] + fees[3] * (value // fees[2]))
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
python 프로그래머스 - k진수에서 소수 개수 구하기 (0) | 2023.04.03 |
---|---|
Python 프로그래머스 - 무인도 여행 (0) | 2023.03.31 |
프로그래머스 - 택배 배달과 수거하기 (0) | 2023.03.05 |
프로그래머스 - 연속 부분 수열 합의 개수 (0) | 2023.02.28 |
프로그래머스 - 혼자서 하는 틱택토 (0) | 2023.02.24 |