[프로그래머스] Python 주차 요금 계산 Level2 - 2022 KAKAO BLIND RECRUITMENT

swb·2024년 2월 7일

프로그래머스

목록 보기
18/23

문제 바로가기

접근 방법

일단, 어려운 로직은 없다. 고려해야 할 것들이 많을 뿐.

  1. 차종을 확인하여 동일 차종이 나갔는지 들어왔는지 확인한다.
    1) 들어왔을 때 시간과 나갔을 때 시간을 빼준다. 한 번이 아니라 탐색이 모두 끝날 때까지 시간을 축적하여 더해준다.
if car == records's car
   if car is IN
      IN_hour, IN_minute
   if car is OUT
      OUT_hour - IN_hour, OUT_minute - IN_minute
   minutes += 시간 * 60 + 분
  1. 들어왔지만 나가지 않은 경우를 확인한다.(제일 중요)
23 - hour
59 - minute
  1. 계산.

코드

import math

def solution(fees, records):
    answer = []
    cars = []

    for record in records:
        cars.append(record[6:10])
    cars = list(set(cars))
    cars.sort()
    out = False
    
    while cars:
        minutes = 0
        for i in range(len(records)):
            if records[i][6:10] == cars[0]:
                if records[i][11:] == 'IN':
                    hour, minute = int(records[i][:2]), int(records[i][3:5])
                    out = False
                elif records[i][11:] == 'OUT':
                    hour = int(records[i][:2]) - hour
                    minute = int(records[i][3:5]) - minute
                    # 음수되는 경우
                    if minute < 0:
                        minute += 60
                        hour -= 1
                    out = True

                if out:
                    minutes += (hour * 60) + minute
                    
		# 들어왔지만 나가지 않은 경우
        if not out:
            hour = 23 - hour
            minute = 59 - minute
            minutes += (hour * 60) + minute

		# 이용시간이 기본 시간보다 적은 경우
        if minutes <= fees[0]:
            answer.append(fees[1])
        # 더 많은 경우
        else:
            result = fees[1] + math.ceil(((minutes - fees[0]) / fees[2])) * fees[3]
            answer.append(result)
        cars.pop(0)
    return answer
profile
개발 시작

0개의 댓글