We-Co

[We-Co] 2022 KAKAO BLIND RECRUITMENT 주차 요금 계산 - Python 본문

Python/Programmers

[We-Co] 2022 KAKAO BLIND RECRUITMENT 주차 요금 계산 - Python

위기의코딩맨 2022. 3. 15. 12:01
반응형

안녕하세요. 위기의 코딩맨입니다.

오늘은 KAKAO BLIND RECRUITMENT에 코팅 테스트 문제로 나온 주차요금 계산 문제 풀이를 해보도록 하겠습니다.

[ 문제 ]

출처 : 프로그래머스

 

입차 출차를 확인해서 기본적인 주차 요금을 계산하는 문제입니다.

테스트 케이스 데이터들의 양식은 리스트 형태로 제공됩니다.

 

저는 python deque를 사용하였으며

입차, 출차를 나누어서 코딩을 진행했습니다.

 

먼저 테스트 케이스를 나누어 저장합니다. 

from collections import deque
import math
feed = [180, 5000, 10, 600]
b_time = feed[0]
b_money = feed[1]
b_min = feed[2]
b_min_money = feed[3]


info_car = ["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"]
in_car = deque()
out_car = []
dict_ = {}

 

다음으로 입차, 출차를 나누어 저장했습니다.

for x in info_car:
  if 'IN' in x:
    in_car.append(x)
  else:
    out_car.append(x)

 

while 반복문을 통해 하나씩 꺼내어 

출차 차량이 존재하는지, 입차 차량의 번호가 들어있는지 여부를 판단해서

시간을 계산합니다.

while in_car: 
  # 들어온 차 정보
  in_info_car = in_car.popleft().split(' ')
  # 시간 변경 분으로
  in_info_car[0] = change_Time(in_info_car[0])   
  # 나가는 차 
  # 포함, IN 여부 판단
  if not out_car or in_info_car[1] not in out_car:
    value_ = change_Time('23:59') - in_info_car[0] 
  for i in range(len(out_car)):  
      # 나가는 차 번호 일치    
      if in_info_car[1] in out_car[i]:    
          out_info_car = out_car.pop(i).split(' ') 
          # 나가는 차 시간 변경
          out_info_car[0] = change_Time(out_info_car[0])   
          value_ = out_info_car[0] - in_info_car[0]   
          break      
  # 저장되어 있지 않으면 추가, 되어 있으면 꺼내서 +
  if in_info_car[1] not in dict_:
    dict_[in_info_car[1]] = value_
  else:   
    dict_[in_info_car[1]] = dict_.get(in_info_car[1]) + value_

 

여기서 change_Time은 함수로 정의합니다.

시간을 분으로 만들도록 합니다.

def change_Time(time_):
  h = int(time_[0:2]) * 60
  m = time_[3:5]
  return int(h) + int(m)

 

마지막으로 데이터를 저장한 dict_를 key 기준으로 정렬을 진행하고

기본 제공 시간보다 이하로 주차를 했으면 기본 사용료만,

이상으로 주차를 진행 했으면 기본 요금 + 반올림((주차시간 - 기본시간) / 금액올라가는 시간) * 시간당 올라가는 금액

결과 리스트에 저장해 주었습니다.

# 정렬
dict_ = dict(sorted(dict_.items()))
result_ = []
# 계산
for key, val in dict_.items(): 
  if val <= b_time:
    result_.append(b_money)
  else:   
    money_ = b_money + math.ceil((val - b_time) / b_min) * b_min_money 
    result_.append(int(money_))

[ 전체 코드 ]

from collections import deque
import math
feed = [1, 461, 1, 10]
b_time = feed[0]
b_money = feed[1]
b_min = feed[2]
b_min_money = feed[3]


info_car = ["00:00 1234 IN"]
in_car = deque()
out_car = []
dict_ = {}
def change_Time(time_):
  h = int(time_[0:2]) * 60
  m = time_[3:5]
  return int(h) + int(m)
 
for x in info_car:
  if 'IN' in x:
    in_car.append(x)
  else:
    out_car.append(x)  
while in_car: 
  # 들어온 차 정보
  in_info_car = in_car.popleft().split(' ')
  # 시간 변경 분으로
  in_info_car[0] = change_Time(in_info_car[0])   
  # 나가는 차 
  # 포함, IN 여부 판단
  if not out_car or in_info_car[1] not in out_car:
    value_ = change_Time('23:59') - in_info_car[0] 
  for i in range(len(out_car)):  
      # 나가는 차 번호 일치    
      if in_info_car[1] in out_car[i]:    
          out_info_car = out_car.pop(i).split(' ') 
          # 나가는 차 시간 변경
          out_info_car[0] = change_Time(out_info_car[0])   
          value_ = out_info_car[0] - in_info_car[0]   
          break      
  # 저장되어 있지 않으면 추가, 되어 있으면 꺼내서 +
  if in_info_car[1] not in dict_:
    dict_[in_info_car[1]] = value_
  else:   
    dict_[in_info_car[1]] = dict_.get(in_info_car[1]) + value_ 
# 정렬
dict_ = dict(sorted(dict_.items()))
result_ = []
# 계산
for key, val in dict_.items(): 
  if val <= b_time:
    result_.append(b_money)
  else:   
    money_ = b_money + math.ceil((val - b_time) / b_min) * b_min_money 
    result_.append(int(money_))

 

결과는 통과!

결과

오늘은 2022 KAKAO BLIND RECRUITMENT 주차 요금 계산 문제를 풀어보았습니다.

아래 링크는 제가 기본적으로 프로그래머스 문제를 풀어놓은 코드를 모아놓은 곳입니다.

https://github.com/JGH94/programers_code/blob/main/programers.ipynb

 

GitHub - JGH94/programers_code

Contribute to JGH94/programers_code development by creating an account on GitHub.

github.com

 

반응형