https://school.programmers.co.kr/learn/courses/30/lessons/92341
1. 해결방법
단순? 아니 그냥 시뮬레이션 문제이다.
본인은 stack과 딕셔너리를 활용해서 해결했다. 디버깅때매 1시간 10분 소요;;
1. 일단 차량 번호에 해당하는 입차, 출차를 딕셔너리에 추가
2. 차량들을 For문 돌려서 각 차량이 주차장에 있었던 시간(분)을 total_time에 저장
3. 주차장에 있었던 시간이 기본 시간보다 적은 경우는 기본 요금, 아니면 기본요금 + 특정 분당 추가요금으로 계산
4. 주의해야될 점은 시간 계산할 때 분을 나누고 소수점 자리 올림으로 해결해야 한다. (글을 다 안읽어서 이걸로 20분 잡아 먹은듯)
5. 한 가지 더 주의할 점은 차량 번호는 오름차순으로 정렬해야 된다는 점이기에 딕셔너리 key 값을 오름차순으로 정렬한다.
2. 정답코드
import math
def solution(fees, records):
answer = []
history = {}
for record in records:
time, number, status = record.split()
if number not in history:
history[number] = [[time, status]]
else:
history[number].append([time, status])
history = dict(sorted(history.items(), key=lambda x:x[0]))
for h in history:
stack = []
total_time = 0
for num in history[h]:
if num[1] == 'IN':
stack.append(num[0])
else:
enter_list = list(stack.pop().split(':'))
out_list = list(num[0].split(':'))
for i in range(2):
if i == 0:
total_time += (int(out_list[i]) - int(enter_list[i])) * 60
else:
total_time += (int(out_list[i]) - int(enter_list[i]))
if stack:
temp = list(stack.pop().split(':'))
total_time += ((23 - int(temp[0])) * 60) + (59 - int(temp[1]))
cost = 0
if total_time <= fees[0]:
cost = fees[1]
elif total_time > fees[0]:
cost = math.ceil((total_time - fees[0]) / fees[2]) * fees[3] + fees[1]
answer.append(cost)
return answer
'Algorithm > 카카오' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT] [3차] 압축 (1) | 2022.11.29 |
---|---|
[2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기 (0) | 2022.11.24 |
[2018 KAKAO BLIND RECRUITMENT] [1차] 뉴스 클러스터링 (0) | 2022.11.23 |
[2019 카카오 개발자 겨울 인턴십] 튜플 (0) | 2022.11.23 |
[2020 KAKAO BLIND RECRUITMENT] 기둥과 보 설치 (1) | 2022.10.25 |