python, pyTorch/코딩테스트-파이썬

프로그래머스 Lv2. 주차 요금 계산

zooyeonii 2022. 2. 4. 00:46

https://programmers.co.kr/learn/courses/30/lessons/92341?language=python3 

 

코딩테스트 연습 - 주차 요금 계산

[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

코드

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에 출차했을 때 요금을 계산하기 위함이다. 

요금을 계산할 때, 기본 시간보다 적게 주차했을 경우 기본요금이 부과됨을 기억하자. 

 
채점 결과
정확성: 100.0
합계: 100.0 / 100.0