코딩테스트/프로그래머스

[프로그래머스] [Level 2] [2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산

박소민 2022. 4. 25. 16:35
주차 요금 계산
 

코딩테스트 연습 - 주차 요금 계산

[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

 

  • 내 풀이
    • IN,OUT 기록 리스트에 따로 담기
    • 입차, 출차 시에 리스트에 넣고 빼기 → 출차하지 않은 차량번호들 23:59로 출차 기록 넣기
    • 리턴값이 차량번호 순서이기 때문에 정렬해서 계산 후 출력하면 됨
    • 여러번 입차한 기록이 있는 경우 분 값을 합쳐서 한번에 계산
    • 올림 함수: math.ceil()
 

[Python] 소수점 올림 함수 ceil(), 내림 함수 floor()

소수점 올림/ 내림 함수 특징 math 라이브러리에 속해있음 → import math 인자로 들어온 값의 올림/ 내림 값을 반환 반환된 값은 정수 타입(int) 음수의 올림/ 내림 도 가능 올림 함수:  math.ceil() import

yygs321.tistory.com

import math
from collections import deque
def solution(fees, records):
    IN=[]
    OUT=[]
    minute=0
    answer = []
    carIO=[]
    for r in records:
        t,n,io=r.split() #입/출차 시간, 차량 번호, IN/OUT 기록
        if io=="IN":
            IN.append([n,t])
            carIO.append(n)
        else:
            OUT.append([n,t])
            carIO.remove(n)
            
    if carIO: #출차 안한 차들 23:59로 OUT기록 넣기
        for c in carIO:
            OUT.append([c,"23:59"])       
            
    IN.sort(key=lambda x:x[0])
    OUT.sort(key=lambda x:x[0])
            
    for i in range(len(IN)):
        result=0
        h1,m1=IN[i][1].split(":")
        h2,m2=OUT[i][1].split(":")
        h1,m1,h2,m2=int(h1),int(m1),int(h2),int(m2)
        if m2>=m1:
            minute+=(m2-m1)+(h2-h1)*60
        else:
            h2-=1
            m2+=60
            minute+=(m2-m1)+(h2-h1)*60
        
        if i<len(IN)-1 and IN[i][0]==IN[i+1][0]: #같은 번호가 다시 들어온 기록이 있을 경우 시간 합쳐서 계산
            continue
        else: #같은 번호가 또 없을 경우
            if minute<=fees[0]:
                answer.append(fees[1])
            else:
                minute-=fees[0]
                result=fees[1]+ math.ceil(minute/fees[2])*fees[3] #올림
                answer.append(result)
            minute=0
            
    return answer
fees=[180, 5000, 10, 600]
records=["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"]

print(solution(fees, records)

#결과
[14600, 34400, 5000]
fees=[120, 0, 60, 591]
records=["16:00 3961 IN","16:00 0202 IN",
			"18:00 3961 OUT","18:00 0202 OUT","23:58 3961 IN"]    
fees2=[1, 461, 1, 10]
records2=["00:00 1234 IN"]

print(solution(fees, records)
print(solution(fees2, records2)

#결과
[0, 591]
[14841]