https://programmers.co.kr/learn/courses/30/lessons/92341?language=python3
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import math
def time_fun(t, in_out):
o = list(t.split(':'))
t = int(o[0])* 60 + int(o[1])
if in_out == 'IN':
t = t*(-1)
return t
def solution(fees, records):
answer = []
cars = []
note = {}
for i in range(len(records)):
cars.append(list(records[i].split()))
note[cars[i][1]]=cars[i][0]
note = sorted(note.items(), key=lambda item: item[0])
for i in note:
time = 0
count = 0
for j in range(len(cars)):
if cars[j][1] == i[0]:
time += time_fun(cars[j][0], cars[j][2])
count +=1
if count%2:
time += time_fun('23:59', 'OUT')
if time>fees[0]:
fee = fees[1] + math.ceil((time - fees[0]) / fees[2]) * fees[3]
else:
fee = fees[1]
answer.append(fee)
return answer
|
cs |
설명
1. 차량번호 오름차순으로 정렬하는 방법?
- 차량번호 순서대로 answer 리스트에 최종 요금을 기록한다.
['입출차 시각', '차량 번호', 'IN/OUT'] 값으로 입력된다. 두가지 방법을 사용할 수 있는데, 문자열을 리스트로 저장할 때, 나는 str.split() 을 써서 공백 기준으로 잘라서 리스트로 저장했지만, records[6:9] 에 해당하는 차량번호를 제일 앞에 저장해서 sort 하는 방법도 사용할 수 있다.
나는 dictionary에 꽂혀서 dict로 구현하였는데, dict에 key : 차량번호로 값을 추가하고 이를 key 기준으로 정렬한다. (사실 이는 문제를 잘못 읽고 '차량 번호'순이 아니라, '입출차 기록'순으로 요금표를 작성하는 줄 알고 구현했던 방식이다. 하지만 결과는 같으니,, 굳이 수정하지 않았다. 오히려 범용성은 더 크지 않을까..하하)
dictionary 형에서 key기준으로 정렬할 경우 item[0], value 기준으로 정렬할 경우 item[1]로 설정하면 된다.
note = sorted(note.items(), key=lambda item: item[0])
2. 누적 주차 시간 계산하기
- dictionary key값을 기준으로, 다시 리스트를 순회한다. 이제 요금을 계산하려고 한다.
time은 총 주차 시간, count는 차량의 입차, 출차의 횟수를 저장한다.
time은 time_fun 함수에서 계산하는데, 예를 들어 입차 시각이 '05:03' 이면, -(5*60 + 3) = -303분이다.
'OUT' 시각은 양수로 더해진다. 최종적으로 OUT-IN 을 구하기 위함이다.
count가 홀수일 경우, 차량의 출차 기록이 없다는 뜻이므로 time에 time_fun('23:59', 'OUT')을 더해준다. 23:59에 출차했을 때 요금을 계산하기 위함이다.
요금을 계산할 때, 기본 시간보다 적게 주차했을 경우 기본요금이 부과됨을 기억하자.
'python, pyTorch > 코딩테스트-파이썬' 카테고리의 다른 글
BOJ 가장긴증가하는부분수열, RGB거리 (0) | 2022.02.12 |
---|---|
프로그래머스 Lv1. 다트게임 (0) | 2022.02.12 |
BOJ 결혼식, 계단오르기 (0) | 2022.02.02 |
프로그래머스 Lv1. 신규아이디추천 (2) | 2022.01.19 |
DFS BFS 모음 (BOJ 1260, 11725, 2667) (0) | 2022.01.08 |