-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
16-jung0115 #173
16-jung0115 #173
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
문제는 완벽하게 이해했는데, 머릿속에 있는 걸 구현해 나가기가 정말 쉽지 않았습니다..
정미님의 수도 코드에 언급된 것처럼 기본 시간이 주차 1회당이 아닌 하루당 주어진다는 것을 생각하지 않고 삽질만 계속하다가 결국 풀이를 참고했네요 ㅎㅎ
저는 차량별 이용 시간을 딕셔너리로 저장하고, 출차 이력이 없는 경우 마지막에 23:59를 추가로 저장해 주었습니다. 이후 딕셔너리를 key로 접근하기 위해서 차량번호를 정렬한 배열을 추가로 만들어주었고, 차량번호별로 탐색해서 소요시간을 계산하였습니다.
from collections import defaultdict
import math
def solution(fees, records):
car_times = defaultdict(int) # 차량별 누적 주차 시간을 저장
in_times = {} # 입차 시간을 기록
# 기록 처리
for record in records:
time, car_num, action = record.split()
time = int(time[:2]) * 60 + int(time[3:]) # 시간을 분 단위로 변환
if action == "IN":
in_times[car_num] = time
else:
car_times[car_num] += time - in_times.pop(car_num) # 출차 후 누적 시간 계산
# 출차 기록이 없는 차량 23:59 출차 처리
for car_num, time in in_times.items():
car_times[car_num] += 1439 - time # 1439는 23:59를 분 단위로 변환한 값
# 차량 번호순으로 정렬하고 요금 계산
answer = []
for car_num in sorted(car_times):
total_time = car_times[car_num]
if total_time <= fees[0]:
answer.append(fees[1])
else:
extra_time = total_time - fees[0]
extra_fee = math.ceil(extra_time / fees[2]) * fees[3]
answer.append(fees[1] + extra_fee)
return answer
정미님의 깔꼼쓰리한 설명과 코드에 감탄하구 갑니다!🤩 정말정말 대단하십니당👍
➡️ 문제 풀이 코드
🔗 문제 링크
프로그래머스 | 시뮬레이션 - 주차 요금 계산(Lv.2)
✔️ 소요된 시간
1시간 30분
✨ 수도 코드
우선 입력 데이터를 파싱하는 작업부터 해줬습니다!
HH:MM 형식의 시간을 분단위 정수로 바꾸고, IN인지 OUT인지는 true, false로 저장해줬습니다.
파싱해준 데이터는 이렇게 따로 Record 클래스를 만들어서 관리해줬습니다!
그리고 데이터를 순회하면서
입차(IN)인 경우, 차량 번호와 입차 시간을 HashMap에 기록했습니다.
출차(OUT)인 경우, HashMap에 저장된 입차 시간을 가져와 주차 시간을 계산하고, HashMap에 저장되어있던 입차 기록을 삭제했습니다.
한 차량이 어려번 입출차를 반복했을 수도 있기 때문에 차량번호 기준으로 주차 시간을 누적해서 기록해줬습니다
그리고 누적된 시간을 기준으로 요금을 계산하고, 차량 번호 순으로 정렬해줬습니다!
요금 계산은 기본 시간을 초과하면 초과된 시간에서 단위 시간당 추가요금을 계산해줬습니다
처음에는 한번 입출차 할 때마다 주차 요금을 계산해야 한다고 생각했는데, 기본 시간이 주차 1회당이 아닌 하루당 주어지는 것이었습니다 이 부분에 주의하면서 문제를 풀어나간 것 같습니다!
✅ 최종 코드
📚 새롭게 알게된 내용