https://programmers.co.kr/learn/courses/30/lessons/92341
코딩테스트 연습 - 주차 요금 계산
[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]
programmers.co.kr
def cal_time(time):
minute = 60*int(time[0:2]) + int(time[3:])
return minute
def solution(fees, records):
answer = []
time, b_money, cut_time ,t_money = fees
parking = {}
car_info = {}
for i in range(len(records)):
car_info[records[i][6:10]] = 0
parking[records[i][6:10]] = 0
for i in range(len(records)):
if "IN" == records[i][11:13]:
parking[records[i][6:10]] = records[i][0:5]
else:
car_info[records[i][6:10]] += cal_time(records[i][0:5]) - cal_time(parking[records[i][6:10]])
parking[records[i][6:10]] = 0
for car_num in parking:
if parking[car_num] != 0:
car_info[car_num]+=cal_time('23:59')- cal_time(parking[car_num])
for car_num in car_info:
if car_info[car_num] <= time:
car_info[car_num] = b_money
else:
if (car_info[car_num]- time)%cut_time != 0:
car_info[car_num] = b_money + (((car_info[car_num] - time)//cut_time)+ 1)* t_money
else:
car_info[car_num] = b_money + ((car_info[car_num] - time)//cut_time)* t_money
car_info= sorted(car_info.items())
for i in range(len(car_info)):
answer.append(car_info[i][1])
return answer
올만에 파이썬이다. 문제는 쉽다고 생각했지만 문제 하나하나 조건이 조금 생각하는게 까다로웠다
알고리즘 보다는 구현에 집중된 문제이다. 딕셔너리를 잘사용하면 좋은 문제들이 많다.
특히 문자열을 요구하는 문제에서
그리고 나는 문자열을 나눌때 슬라이스를 했는데
: 을 스플릿해서 푸는 방법도 있다.
반응형
'코딩 > 프로그래머스 lv2' 카테고리의 다른 글
[프로그래머스] 후보키 - 파이썬 (0) | 2022.03.23 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 - 파이썬 (0) | 2022.03.22 |
[프로그래머스] [3차] 방금그곡 - 파이썬 (0) | 2022.03.08 |
[프로그래머스] [1차] 프렌즈4블록 - 파이썬 (0) | 2022.03.04 |
[프로그래머스] 더 맵게 - 파이썬 (0) | 2022.02.28 |