๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | Lv2] ์ฃผ์ฐจ ์š”๊ธˆ ๊ณ„์‚ฐ (Python) - 2022 KAKAO BLIND RECRUITMENT

sssbin 2023. 2. 28. 20:12

 

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

 

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

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

programmers.co.kr

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๋ฅผ ์ƒ๊ฐํ•˜๋Š”๊ฑด ์‰ฌ์› ์œผ๋‚˜.. ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๊ฐ€ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ์˜€๋‹ค.

 

๋จผ์ € ๋”•์…”๋„ˆ๋ฆฌ์— {์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ: ์‹œ๊ฐ„(์‹œ:๋ถ„ ๋ฆฌ์ŠคํŠธ)}์œผ๋กœ ์ €์žฅํ•˜๊ณ ,

๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•ด์คฌ๋‹ค.

 

time ๋ณ€์ˆ˜๋Š” ๊ฐ ์ž…์ฐจ/์ถœ์ฐจ์— ๋Œ€ํ•œ ์‹œ๊ฐ„์ด๊ณ , total ๋ณ€์ˆ˜๋Š” ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์ด๋‹ค.

time์— ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์‹œ๊ฐ„์„ ๋‘๊ฐœ์”ฉ ์ง์ง€์–ด์„œ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•ด์ฃผ๊ณ , ์ด๋ฅผ total์— ๋”ํ–ˆ๋‹ค.

์ง์ง€์–ด์ง„ ์‹œ๊ฐ„์ด ์—†์œผ๋ฉด ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„์—์„œ 23:59๊นŒ์ง€ ๊ณ„์‚ฐํ•˜์—ฌ total์— ๋”ํ–ˆ๋‹ค.

๋ชจ๋“  ์‹œ๊ฐ„ ๊ณ„์‚ฐ์ด ๋๋‚˜๋ฉด ์ฃผ์ฐจ ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋”•์…”๋„ˆ๋ฆฌ์˜ value ๊ฐ’์„ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ key๊ฐ’์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ๊ณ , value๊ฐ’๋งŒ ๋ชจ์•„์„œ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 92341: ์ฃผ์ฐจ ์š”๊ธˆ ๊ณ„์‚ฐ (2022 KAKAO BLIND RECRUITMENT)

import math

def solution(fees, records):
    car = []
    dic = {}
    for i in records: # ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅ {์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ: ์‹œ๊ฐ„}
        j = i.split()
        if j[1] in dic:
            dic[j[1]].append(j[0])
        else:
            car.append(j[1])
            dic[j[1]] = [j[0]]
        
    for i in car:
        time = -1
        total = 0
        for j in dic[i]: # ๊ฐ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„ ๊ณ„์‚ฐ
            h = int(j.split(':')[0])
            m = int(j.split(':')[1])
            
            if time == -1:
                time = h * 60 + m
            else:
                time = h * 60 + m - time
                total += time
                time = -1
        if time != -1:
            total += (23*60+59) - time
        
        # ์ฃผ์ฐจ ์š”๊ธˆ ๊ณ„์‚ฐ
        if total > fees[0]:
            dic[i] = fees[1] + math.ceil((total-fees[0]) / fees[2]) * fees[3]
        else:
            dic[i] = fees[1]
        
    dic = sorted(dic.items()) # key๊ฐ’์œผ๋กœ ์ •๋ ฌ
    
    answer = []
    for i, j in dic:
        answer.append(j)
    
    return answer