๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฃผ์ฐจ ์š”๊ธˆ ๊ณ„์‚ฐ

by syLim___ 2023. 6. 7.
728x90

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

 

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

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

programmers.co.kr


python

import math
from collections import deque

def calc_time(car, carnum, out_h, out_m):
    in_h, in_m = int(car[carnum][0]), int(car[carnum][1])
    if in_m > out_m:
        out_h -= 1
        out_m += 60
    time = (out_m - in_m) + 60*(out_h - in_h)
    return time

def solution(fees, records):
    answer = dict()
    car = dict()
    q = deque()
    for info in records:
        h, m, carnum, state = int(info[:2]), int(info[3:5]), info[6:10], info[11:]
        if state == "IN":
            car[carnum] = (h,m)
            q.append(carnum)
        else:
            if carnum not in answer:
                answer[carnum] = calc_time(car, carnum, h, m)
            else:
                answer[carnum] += calc_time(car, carnum, h, m)
            q.remove(carnum)
            
    while q:
        carnum = q.popleft()
        if carnum not in answer:
            answer[carnum] = calc_time(car, carnum, 23, 59)
        else:
            answer[carnum] += calc_time(car, carnum, 23, 59)
            
    for i in answer:
        if answer[i] <= fees[0] :
            answer[i] = fees[1]
        else:
            answer[i] = fees[1] + math.ceil((answer[i]-fees[0])/fees[2]) * fees[3]
    answer = sorted(answer.items())
    return [i[1] for i in answer]

ํ‘ธ๋Š”๋ฐ ํ•œ์‹œ๊ฐ„์—์„œ ํ•œ์‹œ๊ฐ„ ๋ฐ˜์ •๋„ ๊ฑธ๋ ธ๋‹ค..

์—„์ฒญ ๊นŒ๋‹ค๋กญ์ง€๋„ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ ์‹œ๊ฐ„์€ ๋“œ๋Ÿฝ๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๋ฌธ์ œ ใ… ใ… 

๊ตฌํ˜„๋ฌธ์ œ ๋งŽ์ด ํ’€์–ด๋ณด๋‹ค๋ณด๋ฉด ์ข€ ๋Š˜๊ฒ ์ง€?

 

์ œ์ถœํ•˜๊ณ  ๋‚˜์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค ํ’€์ด๋ฅผ ๋งŽ์ด ์ฝ์–ด๋ดค๋Š”๋ฐ, ์ฝ์–ด๋ณด๋ฉด์„œ ๊ฐ€์žฅ ํฌ๊ฒŒ ๋А๋‚€ ์ ์€

1. h, m, carnum, state ์ธ์ž๋ฅผ ๋ฐ›์„ ๋•Œ ๊ตณ์ด ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ ํ•  ํ•„์š” ์—†์ด split() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋๋‹ค

2. ์ถœ์ฐจ์‹œ๊ฐ„ - ์ž…์ฐจ์‹œ๊ฐ„ ๊ณ„์‚ฐํ•  ๋•Œ ์‹œ๊ฐ„, ๋ถ„ ๋”ฐ๋กœ๋”ฐ๋กœ ๋ณต์žกํ•˜๊ฒŒ ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค


์•„์ฃผ ๋ฏธ์„ธํ•˜๊ฒŒ ์ชผ๊ธˆ ๋” ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ˆ˜์ •ํ•ด ๋ณด์•˜๋‹ค.

import math
from collections import deque

def calc_time(car, carnum, out_h, out_m):
    in_h, in_m = int(car[carnum][0]), int(car[carnum][1])
    return (out_h*60 + out_m) - (in_h*60 + in_m)

def solution(fees, records):
    answer = dict()
    car = dict()
    q = deque()
    for info in records:
        h, m, carnum, state = info.replace(":"," ").split()
        h, m, carnum = map(int,[h, m, carnum] )
        if state == "IN":
            car[carnum] = (h,m)
            q.append(carnum)
        else:
            if carnum not in answer:
                answer[carnum] = calc_time(car, carnum, h, m)
            else:
                answer[carnum] += calc_time(car, carnum, h, m)
            q.remove(carnum)
            
    while q:
        carnum = q.popleft()
        if carnum not in answer:
            answer[carnum] = calc_time(car, carnum, 23, 59)
        else:
            answer[carnum] += calc_time(car, carnum, 23, 59)
            
    for i in answer:
        if answer[i] <= fees[0] :
            answer[i] = fees[1]
        else:
            answer[i] = fees[1] + math.ceil((answer[i]-fees[0])/fees[2]) * fees[3]
    answer = sorted(answer.items())
    return [i[1] for i in answer]
728x90