π’ μλ΄μ μΈμ
1. λ¬Έμ λ§ν¬
2. μ½λ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
"""
μλ΄μ μΈμ
π λ¬Έμ
νλλͺ¨λΉμ€λ μ°μν SW μΈμ¬ μ±μ©μ μν΄ μμλ‘ μ±μ© μ€λͺ
νλ₯Ό μ§ννκ³ μμ΅λλ€.
μ±μ© μ€λͺ
νμμλ μ±μ©κ³Ό κ΄λ ¨λ μλ΄μ μνλ μ°Έκ°μμκ² λ©ν μ 1:1λ‘ μλ΄ν μ μλ κΈ°νλ₯Ό μ 곡ν©λλ€.
μ±μ© μ€λͺ
νμλ λ©ν nλͺ
μ΄ μμΌλ©°, 1~kλ²μΌλ‘ λΆλ₯λλ μλ΄ μ νμ΄ μμ΅λλ€.
κ° λ©ν λ kκ°μ μλ΄ μ ν μ€ νλλ§ λ΄λΉν μ μμ΅λλ€.
λ©ν λ μμ μ΄ λ΄λΉνλ μ νμ μλ΄λ§ κ°λ₯νλ©°, λ€λ₯Έ μ νμ μλ΄μ λΆκ°λ₯ν©λλ€.
λ©ν λ λμμ μ°Έκ°μ ν λͺ
κ³Όλ§ μλ΄ κ°λ₯νλ©°, μλ΄ μκ°μ μ νν μ°Έκ°μκ° μμ²ν μκ°λ§νΌ 걸립λλ€.
μ°Έκ°μκ° μλ΄ μμ²μ νλ©΄ μλμ κ°μ κ·μΉλλ‘ μλ΄μ μ§νν©λλ€.
μλ΄μ μνλ μ°Έκ°μκ° μλ΄ μμ²μ νμ λ,
μ°Έκ°μμ μλ΄ μ νμ λ΄λΉνλ λ©ν μ€ μλ΄ μ€μ΄ μλ λ©ν μ μλ΄μ μμν©λλ€.
λ§μ½ μ°Έκ°μμ μλ΄ μ νμ λ΄λΉνλ λ©ν κ° λͺ¨λ μλ΄ μ€μ΄λΌλ©΄, μμ μ μ°¨λ‘κ° μ¬ λκΉμ§ κΈ°λ€λ¦½λλ€.
μ°Έκ°μκ° κΈ°λ€λ¦° μκ°μ μ°Έκ°μκ° μλ΄ μμ²νμ λλΆν° λ©ν μ μλ΄μ μμν λκΉμ§μ μκ°μ
λλ€.
λͺ¨λ λ©ν λ μλ΄μ΄ λλ¬μ λ μμ μ μλ΄ μ νμ μλ΄μ λ°κΈ° μν΄ κΈ°λ€λ¦¬κ³ μλ μ°Έκ°μκ° μμΌλ©΄ μ¦μ μλ΄μ μμν©λλ€.
μ΄λ, λ¨Όμ μλ΄ μμ²ν μ°Έκ°μκ° μ°μ λ©λλ€.
μ°Έκ°μμ μλ΄ μμ² μ λ³΄κ° μ£Όμ΄μ§ λ,
μ°Έκ°μκ° μλ΄μ μμ²νμ λλΆν° μλ΄μ μμνκΈ°κΉμ§ κΈ°λ€λ¦° μκ°μ ν©μ΄ μ΅μκ° λλλ‘
κ° μλ΄ μ νλ³λ‘ λ©ν μΈμμ μ νλ € ν©λλ€.
λ¨, κ° μ νλ³λ‘ λ©ν μΈμμ΄ μ μ΄λ ν λͺ
μ΄μμ΄μ΄μΌ ν©λλ€.
𧑠μ ν μ¬ν
1 β€ k β€ 5
k β€ n β€ 20
3 β€ reqsμ κΈΈμ΄ β€ 300
reqsμ μμλ [a, b, c] ννμ κΈΈμ΄κ° 3μΈ μ μ λ°°μ΄μ΄λ©°, cλ² μ νμ μλ΄μ μνλ μ°Έκ°μκ° aλΆμ bλΆ λμμ μλ΄μ μμ²νμμ μλ―Έν©λλ€.
1 β€ a β€ 1,000
1 β€ b β€ 100
1 β€ c β€ k
reqsλ aλ₯Ό κΈ°μ€μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λμ΄ μμ΅λλ€.
reqs λ°°μ΄μμ aλ μ€λ³΅λμ§ μμ΅λλ€. μ¦, μ°Έκ°μκ° μλ΄ μμ²ν μκ°μ λͺ¨λ λ€λ¦
λλ€.
π μ
μΆλ ₯
k n reqs result
3 5 [[10, 60, 1], [15, 100, 3], [20, 30, 1], [30, 50, 3], [50, 40, 1], 25
[60, 30, 2], [65, 30, 1], [70, 100, 2]]
2 3 [[5, 55, 2], [10, 90, 2], [20, 40, 2], [50, 45, 2], [100, 50, 2]] 90
"""
# combinations(iterable, r) : μμμ μκ° rκ°μΈ μ‘°ν©
# combinations_with_replacement(iterable, r) : μμμ μκ° rκ°μΈ μ€λ³΅ μ‘°ν©
# permutations(iterable, r) : λͺ κ°λ₯Ό κ³¨λΌ μμλ₯Ό κ³ λ €ν΄ λμ΄ν κ²½μ°μ μ (μμ΄)
# heap μ΄μ©ν΄ μλ΄ μκ°μ΄ λΉ λ₯΄κ² λλλ λ©ν μ λκΈ°μμ μλ΄ μκ°μ λΉκ΅νμ¬ λκΈ° μκ° κ΅¬νκΈ°
import heapq
from itertools import combinations_with_replacement, permutations
# μλ΄ μ νμ μ k, λ©ν μ μ n, μ°Έκ°μμ μλ΄ μμ²μ λ΄μ 2μ°¨μ μ μ λ°°μ΄ reqs
def solution(k, n, reqs):
answer = 1e9
consulting = [[] for _ in range(k)]
# [a, b, c] ννμ κΈΈμ΄κ° 3μΈ μ μ λ°°μ΄
# cλ² μ νμ μλ΄μ μνλ μ°Έκ°μκ° aλΆμ bλΆ λμμ μλ΄μ μμ²
for i in reqs:
# consulting[μ νλ³] = [μκ°, μλ΄μκ°]
# [[[10, 60], [20, 30], [50, 40], [65, 30]], [[60, 30], [70, 100]], [[15, 100], [30, 50]]]
consulting[i[2] - 1].append([i[0], i[1]])
# λ©ν λ°°μΉ
mento = set()
# μ΅μ κ° μ νμ λμ¬ μ μλ λ©ν μ (κ° μ νλ³λ‘ λ©ν μΈμμ΄ μ μ΄λ ν λͺ
μ΄μμ΄μ΄μΌ ν¨)
arr = [i for i in range(1, n - k + 2)]
# ex) k = 3 μ΄λΌλ©΄, μ€λ³΅ μ‘°ν© -> (1, 1, 3), (1, 2, 2) ...
for mem in combinations_with_replacement(arr, k):
# μ΅μ κ° μ νμ λμ¬ μ μλ λ©ν μ & μ€λ³΅ μ‘°ν© λ κ²½μ°μ μ ν©μ΄ λ©ν μμ κ°μμ§
if mem not in mento and sum(mem) == n:
# κ°λ₯ν λͺ¨λ μμλ₯Ό λ°ν (μμ΄)
for p in permutations(mem, k):
mento.add(p)
print(consulting)
# mento : {(1, 1, 3), (1, 3, 1), (1, 2, 2), (2, 1, 2), (2, 2, 1), (3, 1, 1)}
for case in mento:
result = 0
for i in range(k):
# λ©ν μ μ [0], [0, 0, 0] ...
heap = [0] * case[i]
# consulting[μλ΄ μ ν] : [μκ°, μλ΄ μκ°]
for startTime, consultingTime in consulting[i]:
# λͺ¨λ κ°μ popν κ²°κ³Όλ₯Ό 보면, μμ κ° μμ(μ€λ¦μ°¨μ)λ‘ μΆλ ₯λ κ²
prev = heapq.heappop(heap)
# μμμκ°μ΄ μ΄μ μ’
λ£ μκ°λ³΄λ€ μλ€λ©΄ λ°λ‘ μ§ν
if startTime >= prev:
# μΆκ°λ μμκ° λΆλͺ¨λ³΄λ€ μμΌλ©΄ (μ΅μ) ν κ΅¬μ‘°κ° μλλ―λ‘, λΆλͺ¨μ μ리λ₯Ό λ°κΎΌλ€
heapq.heappush(heap, startTime + consultingTime)
# λκΈ° μκ° μΆκ°
else:
result += prev - startTime
heapq.heappush(heap, prev + consultingTime)
# μ€λ³΅μ‘°ν© + μμ΄λ‘ ꡬν "λ©ν λ°°μ΄μ μ‘°ν©" μ€μμ, κ°μ₯ μμ λκΈ° μκ°
answer = min(answer, result)
return answer
μ νμ±
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
μ νμ± ν μ€νΈ ν μ€νΈ 1 γ ν΅κ³Ό (0.05ms, 10.4MB) ν μ€νΈ 2 γ ν΅κ³Ό (0.04ms, 10.4MB) ν μ€νΈ 3 γ ν΅κ³Ό (0.03ms, 10.4MB) ν μ€νΈ 4 γ ν΅κ³Ό (0.03ms, 10.2MB) ν μ€νΈ 5 γ ν΅κ³Ό (0.36ms, 10.3MB) ν μ€νΈ 6 γ ν΅κ³Ό (1.80ms, 10.2MB) ν μ€νΈ 7 γ ν΅κ³Ό (1.13ms, 10.3MB) ν μ€νΈ 8 γ ν΅κ³Ό (0.47ms, 10.3MB) ν μ€νΈ 9 γ ν΅κ³Ό (330.16ms, 10.5MB) ν μ€νΈ 10 γ ν΅κ³Ό (317.66ms, 10.5MB) ν μ€νΈ 11 γ ν΅κ³Ό (308.86ms, 10.5MB) ν μ€νΈ 12 γ ν΅κ³Ό (312.64ms, 10.4MB) ν μ€νΈ 13 γ ν΅κ³Ό (314.26ms, 10.4MB) ν μ€νΈ 14 γ ν΅κ³Ό (314.12ms, 10.4MB) ν μ€νΈ 15 γ ν΅κ³Ό (306.52ms, 10.4MB) ν μ€νΈ 16 γ ν΅κ³Ό (316.86ms, 10.5MB) ν μ€νΈ 17 γ ν΅κ³Ό (315.08ms, 10.5MB) ν μ€νΈ 18 γ ν΅κ³Ό (308.69ms, 10.4MB) ν μ€νΈ 19 γ ν΅κ³Ό (311.61ms, 10.5MB) ν μ€νΈ 20 γ ν΅κ³Ό (314.18ms, 10.4MB) μ±μ κ²°κ³Ό μ νμ±: 100.0 ν©κ³: 100.0 / 100.0
3. ν΄μ€
- λ©ν κ° μλ΄ μ ν λ³λ‘ λλ μ μλ κ²½μ°μ μλ₯Ό ꡬνλ€
- κ° μ νλ³ μλ΄ μ μ΅μ λ©ν κ° νλͺ μ΄μμ΄μ΄μΌ ν¨
- λ©ν κ° μ΅μ, μ΅λ λμ¬ μ μλ arr λ₯Ό ꡬν΄μ€
- μ€λ³΅ μ‘°ν©μΌλ‘ (arr, k) λ₯Ό ꡬν¨
- κ·Έμ€μμ μμ΄λ‘ μ¬λ¬ μμλ₯Ό κ΅¬ν¨ (μ€λ³΅ μ‘°ν©, k)
- heap μ ν΅ν΄ κ°μ₯ μ μ μλ΄ μκ°μ λΉκ΅νκΈ°
- μμ μκ°μ΄ μ΄μ μ’ λ£ μκ° λ³΄λ€ μμΌλ©΄ μλ΄ λ°λ‘ μμ
- μ΄μ μλ΄μ΄ μμ§ μ λλ¬λ€λ©΄ μ΄μ μλ΄ - μ΄μ μμν΄μΌ ν μλ΄ μκ° μ λΉΌκ³ λμ μν¨λ€, κ·Έλ¦¬κ³ μ΄μ μλ΄ μκ°μ μ΄μ μμν΄μΌ ν μλ΄ μκ°μ λ£μ΄μ€λ€
This post is licensed under CC BY 4.0 by the author.