Skip to content

Commit 12ee5b5

Browse files
committed
analysis
1 parent 0e40580 commit 12ee5b5

File tree

2 files changed

+58
-18
lines changed

2 files changed

+58
-18
lines changed

โ€Žbinary-tree-maximum-path-sum/haklee.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
1-
"""TC: O(), SC: O()
1+
"""TC: O(n), SC: O(h)
22
33
44
์•„์ด๋””์–ด:
5-
-
5+
- ๊ฐ ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ, ํ˜น์€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ด€์ ์—์„œ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.
6+
- ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ด€์ ์—์„œ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค๋•Œ:
7+
- ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ์–‘์ชฝ ์ž์‹ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ๋กœ๋ฅผ ์ž‡๋Š” ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
8+
- ์ด๋•Œ ์ž์‹ ๋…ธ๋“œ๋Š”
9+
- ๊ฒฝ๋กœ์— ํฌํ•จ๋˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์ด ๊ฒฝ์šฐ path์— 0๋งŒํผ ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
10+
- ์ž์‹ ๋…ธ๋“œ์˜ ๋‘ ์ž์‹ ๋…ธ๋“œ ์ค‘ ํ•œ ์ชฝ์˜ ๊ฒฝ๋กœ์™€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ด์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
11+
์•„๋ž˜์„œ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช….
12+
- ์ž์‹ ๋…ธ๋“œ์˜ ๊ด€์ ์—์„œ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค๋•Œ:
13+
- ์ž์‹ ๋…ธ๋“œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
14+
- ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์ž์‹ ๋…ธ๋“œ ์ค‘ ํ•œ ์ชฝ๊ณผ๋งŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ ๋…ธ๋“œ์™€
15+
๋ณธ์ธ์˜ ์–‘์ชฝ ์ž์‹ ๋…ธ๋“œ ๋ชจ๋‘์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ์ด ๋…ธ๋“œ๊ฐ€ ์„ธ ๊ฐˆ๋ฆผ๊ธธ์ด ๋˜์–ด์„œ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค
16+
์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ.
17+
- ์œ„์˜ ๋ถ„์„์„ ํ†ตํ•ด ์ตœ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ์˜ ํ•จ์ˆ˜๋ฅผ root๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
18+
- ํŠน์ • node๊ฐ€ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ํ–ˆ์„๋•Œ ๋ณธ์ธ์˜ ๊ฐ’์— ๋‘ ์ž์‹์˜ max(์ตœ๋Œ€ ๊ฒฝ๋กœ, 0) ๊ฐ’์„ ๋”ํ•ด์„œ
19+
๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค์–ด๋ณธ๋‹ค. ์ด ๊ฐ’์ด ๊ธฐ์กด solution๋ณด๋‹ค ํด ๊ฒฝ์šฐ solution์„ ์—…๋ฐ์ดํŠธ.
20+
- ํŠน์ • node๊ฐ€ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋  ๊ฒฝ์šฐ ๋ณธ์ธ์˜ ๋‘ ์ž์‹ ์ค‘ ๋” ํฐ ๊ฒฝ๋กœ๋ฅผ ๋ถ€๋ชจ์— ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.
21+
๋ณธ์ธ์˜ ๊ฐ’์— max(์™ผ์ชฝ ๊ฒฝ๋กœ, ์˜ค๋ฅธ์ชฝ ๊ฒฝ๋กœ)์„ ๋”ํ•ด์„œ ๋ฆฌํ„ด.
622
723
SC:
8-
-
24+
- solution๊ฐ’์„ ๊ด€๋ฆฌํ•œ๋‹ค. O(1).
25+
- ํ˜ธ์ถœ ์Šคํƒ์€ ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ ์Œ“์ผ ์ˆ˜ ์žˆ๋‹ค. O(h).
26+
- ์ข…ํ•ฉํ•˜๋ฉด O(h).
927
1028
TC:
11-
-
29+
- ๊ฐ ๋…ธ๋“œ์—์„œ O(1) ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰.
30+
- ๋ชจ๋“  ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ฏ€๋กœ O(n).
1231
"""
1332

1433

โ€Žgraph-valid-tree/haklee.py

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
์ด๋ฃจ์ง€ ๋ชปํ•œ๋‹ค.
1717
"""
1818

19-
"""TC: O(), SC: O()
19+
"""TC: O(n * ฮฑ(n)), SC: O(n)
2020
2121
n์€ ์ฃผ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, e๋Š” ์ฃผ์–ด์ง„ ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜.
2222
@@ -27,12 +27,17 @@
2727
- find๋ฅผ ํ†ตํ•ด์„œ 0๋ฒˆ์งธ ๋…ธ๋“œ์™€ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
2828
- ๋” ์ข‹์€ ๊ตฌํ˜„:
2929
- union ์‹œํ–‰ ์ค‘ ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•œ ๋‘ ๋…ธ๋“œ๋ฅผ ํ•ฉ์น˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด False ๋ฆฌํ„ด
30+
- union-find๋Š” [Disjoint-set data structure - Wikipedia](https://en.wikipedia.org/wiki/Disjoint-set_data_structure)
31+
๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์— time complexity ๊ด€๋ จ ์„ค๋ช…์ด ์ž์„ธํ•˜๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ ๊ถ๊ธˆํ•˜๋ฉด ์ฐธ๊ณ .
3032
3133
SC:
32-
-
34+
- union-find์—์„œ ์“ธ parent ์ •๋ณด๋งŒ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค parent ๋…ธ๋“œ(์ธ๋ฑ์Šค), rank๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ O(n).
3335
3436
TC:
35-
-
37+
- union ๊ณผ์ •์— union by rank ์ ์šฉ์‹œ O(ฮฑ(n)) ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๋“ ๋‹ค. ์ด๋•Œ ฮฑ(n)์€ inverse Ackermann function
38+
์œผ๋กœ, ๋งค์šฐ ๋А๋ฆฐ ์†๋„๋กœ ๋Š˜์–ด๋‚˜๋ฏ€๋กœ ์‚ฌ์‹ค์ƒ ์ƒ์ˆ˜๋ผ๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.
39+
- union ์‹œํ–‰์„ ์ตœ๋Œ€ e๋ฒˆ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ O(e * ฮฑ(n)).
40+
- e = n-1 ์ด๋ฏ€๋กœ O(n * ฮฑ(n)).
3641
"""
3742

3843

@@ -48,22 +53,36 @@ def valid_tree(self, n, edges):
4853

4954
# union find
5055
parent = list(range(n))
56+
rank = [0] * n
5157

52-
def find(x):
58+
def find(x: int) -> bool:
5359
if x == parent[x]:
5460
return x
5561

56-
parent[x] = find(parent[x])
62+
parent[x] = find(parent[x]) # path-compression
5763
return parent[x]
5864

59-
def union(a, b):
65+
def union(a: int, b: int) -> bool:
66+
# ์›๋ž˜๋Š” ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ, ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•œ ๋…ธ๋“œ๋ฅผ
67+
# unionํ•˜๋ ค๋Š” ์ƒํ™ฉ์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ’ ๋ฆฌํ„ด.
68+
6069
pa = find(a)
6170
pb = find(b)
71+
72+
# union by rank
73+
if pa == pb:
74+
# parent๊ฐ€ ๊ฐ™์Œ. rank ์ž‘์—… ์•ˆ ํ•ด๋„ ๋œ๋‹ค.
75+
return True
76+
77+
if rank[pa] < rank[pb]:
78+
pa, pb = pb, pa
79+
6280
parent[pb] = pa
6381

64-
# ์›๋ž˜๋Š” ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ, ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•œ ๋…ธ๋“œ๋ฅผ
65-
# unionํ•˜๋ ค๋Š” ์ƒํ™ฉ์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ’ ๋ฆฌํ„ด.
66-
return pa == pb
82+
if rank[pa] == rank[pb]:
83+
rank[pa] += 1
84+
85+
return False
6786

6887
if len(edges) != n - 1:
6988
# ํŠธ๋ฆฌ์—๋Š” ์—ฃ์ง€๊ฐ€ `(๋…ธ๋“œ ๊ฐœ์ˆ˜) - 1`๊ฐœ ๋งŒํผ ์žˆ๋‹ค.
@@ -84,24 +103,26 @@ def union(a, b):
84103
for e in edges:
85104
if union(*e):
86105
return False
87-
106+
88107
return True
89108

90109

91-
"""TC: O(), SC: O()
110+
"""TC: O(n), SC: O(n)
92111
93112
n์€ ์ฃผ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, e๋Š” ์ฃผ์–ด์ง„ ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜.
94113
95114
์•„์ด๋””์–ด(์ด์–ด์„œ):
96-
- union-find๋ฅผ ์“ฐ๋ฉด union์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก์•„๋จน๋Š”๊ฒƒ ๊ฐ™๋‹ค.
97115
- ํŠธ๋ฆฌ๋ฅผ ์ž˜ ์ด๋ค˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ํ•œ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ dfs๋ฅผ ๋Œ๋ ค์„œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์— ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ์ง€
98116
์ฒดํฌํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์ด๊ฒŒ ์‹œ๊ฐ„๋ณต์žก๋„์— ๋” ์œ ๋ฆฌํ•˜์ง€ ์•Š์„๊นŒ?
99117
100118
SC:
101-
-
119+
- adjacency list๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. O(e).
120+
- ํ˜ธ์ถœ ์Šคํƒ์€ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋Š” ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์‚ฌ์ดํด์ด ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒฝ๋กœ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋งŒํผ ๊นŠ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
121+
์ตœ์•…์˜ ๊ฒฝ์šฐ O(n).
122+
- ์ด๋•Œ e = n-1 ์ด๋ฏ€๋กœ ์ข…ํ•ฉํ•˜๋ฉด O(n).
102123
103124
TC:
104-
-
125+
- ๊ฐ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๊ณผ์ •์— O(1). ์ด๋Ÿฐ ๋…ธ๋“œ๋ฅผ ์ตœ์•…์˜ ๊ฒฝ์šฐ n๊ฐœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(n).
105126
"""
106127

107128

0 commit comments

Comments
ย (0)