Python3/프로그래머스

2022.02.27 [프로그래머스] (python 파이썬) 주차 요금 계산

ian's coding 2022. 2. 27. 22:51
728x90
반응형

 

 

 

 

 

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


풀이

  • 아래 문제에서 우선 records로 for문을 돌리며 중복된 값을 제외한 차량 번호를 nums배열에 담았다.
  • 다음 nums배열의 길이에 맞게 answer, check,time배열을 만들었다. check는 차량이 들어왔는지 나갔는지 확인을 하기 위해서 만들었고, time은 차량별 이용 시간을 저장하기 위해 만들었다.
  • 다시 records로 for문을 돌리며 시간을 분단위로 계산하기 때문에 mm에 분으로 바꾼 시간을 저장했다.
  • 차량의 이용시간은 나간시간 - 들어온 시간이다. 그래서 만약 arr[2]가 IN이면 시간을 빼고 check를 True로 바꾸고, OUT이면 시간을 더하고 check를 False로 바꿨다.
  • for문이 다 돌았을 때 check가 True면 들어왔지만 나가지 않았기 때문에 해당 차량의 이용시간에 23*60+59를 더했다. (차량이 나간 기록이 없을 경우 23:59에 나간 것으로 간주하기 때문)
  • 그리고 각 차량의 이용시간이 기본 이용시간(fees[0])보다 크면 [((이용시간-기본 시간)/단위시간)*단위 시간당 요금+기본 요금]을 해준다. 여기서 math.ceil을 사용한 이유는 기본 시간으로 나누어 지지않으면 올림을 해야하기 때문이다.
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
35
36
import math
def solution(fees, records):
    nums=[] # 차량번호를 담을 배열
    #중복된 차량 번호를 제외하고 nums배열에 차량 번호를 추가
    for i in records:
        arr=list(i.split())
        num=arr[1]
        if num not in nums:
            nums.append(num)
    nums.sort()
    answer = [0]*len(nums)
    check=[False]*len(nums) # 차량이 들어왔는지 나갔는지 체크
    time={x:0 for x in nums} # 차량별 이용시간 저장
    for i in records:
        arr=list(i.split())
        h,m=map(int,arr[0].split(':'))
        mm=h*60+# 요금 계산을 분단위로 하기 때문에 시간을 분으로 바꿈
        if arr[2]=='IN':
            time[arr[1]]-=mm 
            check[nums.index(arr[1])]=True
        elif arr[2]=='OUT':
            time[arr[1]]+=mm
            check[nums.index(arr[1])]=False
            
    for i in range(len(check)):
        if check[i]:
            time[nums[i]]+=23*60+59
            
    for i in range(len(nums)):
        if time[nums[i]]>fees[0]:
            fee=math.ceil((time[nums[i]]-fees[0])/fees[2])*fees[3]+fees[1]
            answer[i]=fee
        else:
            answer[i]=fees[1]
            
    return answer
cs

 

 

 

 

728x90
반응형