1import math
 2
 3def diff(start, end):
 4    sh, sm = map(int, start.split(':'))
 5    eh, em = map(int, end.split(':'))
 6    
 7    return (eh*60+em) - (sh*60+sm)
 8
 9def calc(time, baseTime, baseFee, unitTime, unitFee):
10    if time < baseTime:
11        return baseFee
12    time -= baseTime
13    return baseFee + math.ceil(time/unitTime)*unitFee
14    
15def solution(fees, records):
16    cars = {}
17    for i in records:
18        time, car_num, _ = i.split(' ')
19        # ์ƒˆ๋กœ ์ž…์ฐจ ํ•œ ๊ฒฝ์šฐ
20        if not car_num in cars:
21            cars[car_num] = [0, time]
22        else:
23            # ์ถœ์ฐจ ํ›„ ๋‹ค์‹œ ์ž…์ฐจํ•œ ๊ฒฝ์šฐ
24            if cars[car_num][1] == '':
25                cars[car_num][1] = time
26            # ์ถœ์ฐจํ•œ ๊ฒฝ์šฐ
27            else:
28                cars[car_num][0] += diff(cars[car_num][1], time)
29                cars[car_num][1] = ''
30    
31    # ์•„์ง ์ถœ์ฐจํ•˜์ง€ ์•Š์€ ์ฐจ๋Ÿ‰๋“ค์— ๋Œ€ํ•ด 23:59์— ์ถœ์ฐจํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ
32    for num in cars:
33        if cars[num][1] != '':
34            cars[num][0] += diff(cars[num][1], '23:59')
35            cars[num][1] = ''
36    
37    # ์š”๊ธˆ ๊ณ„์‚ฐ
38    for num in cars:
39        cars[num] = calc(cars[num][0], fees[0], fees[1], fees[2], fees[3])
40    
41    # ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ์ˆœ์œผ๋กœ ์ •๋ ฌ
42    sorted_keys = sorted(cars.keys())
43    # ์š”๊ธˆ๋งŒ ์ถ”์ถœํ•ด์„œ ๋ฐ˜ํ™˜
44    return [cars[key] for key in sorted_keys]

๋ฌธ์ œ

 1def solution(n, info):
 2    # ๊ฐ๊ฐ ๋ช‡ ๋ฒˆ ๋งž์ถฐ์•ผ ์ ์ˆ˜๋ฅผ ์–ป๋Š”์ง€ ์ €์žฅํ•˜์˜€๋‹ค
 3    goal_list = [i+1 for i in info]
 4
 5    cases = []
 6
 7    def dfs(score, cnt, case):
 8        # ๋ช‡ ๋ฒˆ์งธ ์ ์ˆ˜์ธ์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค (0:10์ , 1:9์ , ...)
 9        length = len(case)
10        if length == 11:
11            # ํ™”์‚ด ๊ฐœ์ˆ˜๊ฐ€ ๋‚จ์•˜๋‹ค๋ฉด 0์ ์— ์ฑ„์›Œ์ค€๋‹ค
12            if cnt != n:
13                case[-1] += n-cnt
14            cases.append((score, case))
15            return
16        # ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ ๋ช‡ ์  ๋งž์•„์•ผ ์ ์ˆ˜๋ฅผ ๋”ฐ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค
17        goal = goal_list[length]
18
19        # ์ ์ˆ˜๋ฅผ ๋”ฐ๋Š” ๊ฒฝ์šฐ
20        if cnt + goal <= n:
21            # ๋”ด ์ ์ˆ˜๋ฅผ ๋”ํ•ด์ค€๋‹ค
22            dfs(score+(10-length), cnt+goal, case+[goal])
23        # ์ƒ๋Œ€๊ฐ€ ์ ์ˆ˜๋ฅผ ๋”ฐ๋Š” ๊ฒฝ์šฐ
24        if goal != 1:
25            # ์ƒ๋Œ€๊ฐ€ ๋”ด ์ ์ˆ˜๋ฅผ ๋นผ์ค€๋‹ค
26            dfs(score-(10-length), cnt, case+[0])
27        # ์•„๋ฌด๋„ ๋ชป ๋งž์ถ”๋Š” ๊ฒฝ์šฐ
28        else:
29            dfs(score, cnt, case+[0])
30            
31    dfs(0, 0, [])
32    # ์ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ๋” ๋งŽ์ด ๋งž์ถ˜ ๊ฒฝ์šฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์˜€๋‹ค
33    cases.sort(key= lambda x: (x[0], x[1][::-1]))
34
35    if cases[-1][0] > 0:
36        return cases[-1][1]
37    # ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ case์˜ ์ ์ˆ˜๊ฐ€ ์Œ์ˆ˜์ธ ๊ฒฝ์šฐ, ๋ฌด์กฐ๊ฑด ์ง€๋Š” ๊ฒฝ์šฐ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค    
38    return [-1]

๋ฌธ์ œ

 1from collections import deque
 2
 3def solution(want, number, discount):
 4    want_dict = dict()
 5    answer = 0
 6    
 7    for i in range(len(want)):
 8        want_dict[want[i]] = number[i]
 9    
10    for i in discount[:10]:
11        if i in want_dict:
12            want_dict[i] -= 1
13    
14    for i in range(0, len(discount)-9):
15        if all(map(lambda x: x <= 0, want_dict.values())):
16        	answer += 1
17        
18        if discount[i] in want_dict:
19        	want_dict[discount[i]] += 1
20        if i+10 < len(discount) and discount[i+10] in want_dict:
21            want_dict[discount[i+10]] -= 1
22    
23    return answer

๋ฌธ์ œ

 1def solution(order):
 2    answer = 0
 3    length = len(order)
 4    stackA = [i for i in range(length, 0, -1)]
 5    stackB = []
 6    
 7    for i in order:
 8        while True:
 9            if stackA and stackA[-1] == i:
10                stackA.pop()
11                break
12            if stackB and stackB[-1] == i:
13                stackB.pop()
14                break
15
16            if stackB and stackB[-1] > i:
17                return answer
18            
19            stackB.append(stackA.pop())
20        answer += 1
21        
22    return answer

๋ฌธ์ œ