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+m # 요금 계산을 분단위로 하기 때문에 시간을 분으로 바꿈
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
반응형
'Python3 > 프로그래머스' 카테고리의 다른 글
2022.03.01 [프로그래머스] (python 파이썬) 파괴되지 않은 건물 (0) | 2022.03.01 |
---|---|
2022.02.28 [프로그래머스] (python 파이썬) 프린터 (0) | 2022.02.28 |
2022.02.28 [프로그래머스] (python 파이썬) 양궁대회 (0) | 2022.02.28 |
2022.02.27 [프로그래머스] (python 파이썬) k진수에서 소수 개수 구하기 (0) | 2022.02.27 |
2022.02.27 [프로그래머스] (python 파이썬) 신고 결과 받기 (0) | 2022.02.27 |
댓글