๐Ÿ—๏ธ Algorithm/โฌ› ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

โฌ› [Programmers] [2022 KAKAO BLIND RECRUITMENT] [Python] Level2_์ฃผ์ฐจ ์š”๊ธˆ ๊ณ„์‚ฐ

Dbswnstjd 2022. 10. 30. 22:42

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/92341

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

ํ’€์ด

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2๋‹จ๊ณ„ - ์ฃผ์ฐจ ์š”๊ธˆ ๊ณ„์‚ฐ
from collections import deque
import math

# fees: [๊ธฐ๋ณธ ์‹œ๊ฐ„(๋ถ„), ๊ธฐ๋ณธ ์š”๊ธˆ(์›), ๋‹จ์œ„ ์‹œ๊ฐ„(๋ถ„), ๋‹จ์œ„ ์š”๊ธˆ(์›)]
def get_fee(minutes, fees):
    return fees[1] + math.ceil(max(0, (minutes - fees[0])) / fees[2]) * fees[3]
def solution(fees, records):
    parking = dict()
    stack = dict()
    
    for record in records:
        time, car, cmd = record.split()
        hour, minute = time.split(":")
        minutes = int(hour) * 60 + int(minute) # ์‹œ๊ฐ„ -> ๋ถ„ ํ™˜์‚ฐ

        if cmd == 'IN':
            parking[car] = minutes
        elif cmd == 'OUT':
            try:
                stack[car] += minutes - parking[car]
            except:
                stack[car] = minutes - parking[car]
            del parking[car] # ์ถœ์ฐจ ์ฐจ๋Ÿ‰ ์‚ญ์ œ
    
    # ์ถœ์ฐจ ๊ธฐ๋ก ์—†๋Š” ์ฐจ 23:59 ์ถœ์ฐจ ์ฒ˜๋ฆฌ
    for car, minute in parking.items():
        try:
            stack[car] += 23*60+59 - minute
        except:
            stack[car] = 23*60+59 - minute
        
    return [get_fee(time, fees) for car, time in sorted(list(stack.items()), key=lambda x: x[0])]
print(solution([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"]))