문제 확인

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

  • 들어온 차는 나가지 않으면 23 : 59에 나간 것으로 가정한다.
  • 이 경우 들어오고, 나간 시간의 차이를 구하는 것은 23:59 분과 현재 시각 사이 차를 구하는 것과 동일해진다.
  • OUT과 IN을 서로 다른 기호를 가지도록 더해주면 결국 주차장에 머무른 총 시간을 구할 수 있다.

점점 좋아지는 그림 실력ㅎㅎ

# 차량별 주차 요금 계산
# 00:00 ~ 23:59 까지 누적으로 처리 -> 요금 일괄 정산
# 다음날 출차는 고려 X
# 요금 계산 시 '올림' 처리
# 차량 번호가 작은 자동차부터, 차례대로 return!
import math
# 초과 시간 올림 처리

def solution(fees, records):
    # 차량 정보 : {차량 번호 : 시간, 기록 횟수}
    car_info = {}
    # 정산 정보
    fee_list = []
    # 최대 시간 : 23:59에 나갔다고 가정
    max_time = 23 * 60 + 59
    for record in records:
        t, c, _ = record.split(" ")
        t = int(t[:2]) * 60 + int(t[3:])
        # 차량 정보 등록
        if c not in car_info:
            car_info[c] = [0, 0]
        # 시간 등록
        car_info[c][0] += ((max_time - t) * (-1) ** (car_info[c][1]))
        # 기록 횟수 증가
        car_info[c][1] += 1
    # 번호 순으로 정렬
    for _, t in sorted(car_info.items(), key = lambda x : x[0]):
        # 초과 시간
        extra_t = t[0] - fees[0] if t[0] > fees[0] else 0
        # 요금 계산 : 기본 요금 + (초과 시간) * 추가 요금
        fee = fees[1] + math.ceil((extra_t) / fees[2]) * (fees[3])
        fee_list.append(fee)
    return fee_list