Skip to content

Commit 0e40580

Browse files
committed
solutions
1 parent 5c74619 commit 0e40580

File tree

5 files changed

+398
-0
lines changed

5 files changed

+398
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""TC: O(), SC: O()
2+
3+
4+
์•„์ด๋””์–ด:
5+
-
6+
7+
SC:
8+
-
9+
10+
TC:
11+
-
12+
"""
13+
14+
15+
# Definition for a binary tree node.
16+
# class TreeNode:
17+
# def __init__(self, val=0, left=None, right=None):
18+
# self.val = val
19+
# self.left = left
20+
# self.right = right
21+
class Solution:
22+
def maxPathSum(self, root: Optional[TreeNode]) -> int:
23+
sol = [-1001] # ๋…ธ๋“œ์˜ ์ตœ์†Œ๊ฐ’๋ณด๋‹ค 1 ์ž‘์€ ๊ฐ’. ํ˜„ ๋ฌธ์ œ ์„ธํŒ…์—์„œ -inf ์—ญํ• ์„ ํ•จ.
24+
25+
def try_get_best_path(node):
26+
if node is None:
27+
# ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ์„๋•Œ ๊ฒฝ๋กœ ์—†์Œ. ์ด๋•Œ ์ด ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’์„
28+
# 0์œผ๋กœ ์น  ์ˆ˜ ์žˆ๋‹ค.
29+
return 0
30+
31+
# ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’.
32+
l = max(try_get_best_path(node.left), 0)
33+
r = max(try_get_best_path(node.right), 0)
34+
35+
# ํ˜„ ๋…ธ๋“œ๋ฅผ ๋‹ค๋ฆฌ ์‚ผ์•„์„œ ์–‘์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฒฝ๋กœ๋ฅผ ์ด์—ˆ์„๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ ๊ฐ’์ด
36+
# ์ตœ๋Œ€ ๊ฒฝ๋กœ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ฐ’์„ ํ˜„ ์†”๋ฃจ์…˜๊ณผ ๋น„๊ตํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.
37+
sol[0] = max(node.val + l + r, sol[0])
38+
39+
# ํ˜„ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ `์ด ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’`์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฐ’์„ ๋ฆฌํ„ด.
40+
return node.val + max(l, r)
41+
42+
try_get_best_path(root)
43+
return sol[0]

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

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
"""
2+
์•„์ด๋””์–ด:
3+
- ํŠธ๋ฆฌ์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ์—ฃ์ง€ ๊ฐœ์ˆ˜๊ฐ€ n-1๊ฐœ์—ฌ์•ผ ํ•œ๋‹ค.
4+
- ์—ฃ์ง€ ๊ฐœ์ˆ˜๊ฐ€ n-1๊ฐœ์ด๋ฏ€๋กœ ๋งŒ์•ฝ ์ค‘๊ฐ„์— ์‚ฌ์ดํด์ด ์žˆ๋‹ค๋ฉด ํŠธ๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ์ด ์•ˆ ๋œ๋‹ค.
5+
- ์—ฐ๊ฒฐ์ด ์•ˆ ๋˜์—ˆ์œผ๋‹ˆ ํŠธ๋ฆฌ๋Š” ์•„๋‹ˆ๊ณ ... ๋ช‡ ์กฐ๊ฐ์œผ๋กœ ์ชผ๊ฐœ์ง„ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋œ๋‹ค. ์—ฌํŠผ, valid tree๊ฐ€
6+
์•„๋‹ˆ๊ฒŒ ๋œ๋‹ค.
7+
- spanning tree ๋งŒ๋“ค ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ์—ฃ์ง€ ํ•˜๋‚˜๋ฅผ ๋”ํ•  ๋•Œ๋งˆ๋‹ค ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜์”ฉ ํŠธ๋ฆฌ์— ์ถ”๊ฐ€๋˜์–ด์•ผ
8+
์—ฃ์ง€ n-1๊ฐœ๋กœ ๋…ธ๋“œ n๊ฐœ๋ฅผ ๊ฒจ์šฐ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ค‘๊ฐ„์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ ์•ˆํ•˜๊ณ  ์—„ํ•œ ๊ณณ์—
9+
์—ฃ์ง€๋ฅผ ์จ์„œ ์‚ฌ์ดํด์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ•˜๋ฉด ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.
10+
- ์œ„์˜ ์˜ˆ์‹œ๋ณด๋‹ค ์ข€ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์„ค๋ช…ํ•˜๋Š” union ์‹œํ–‰์œผ๋กœ๋„ ์„ค๋ช…์ด
11+
๊ฐ€๋Šฅํ•˜๋‹ค. union-find์—์„œ๋Š” ์ฒ˜์Œ์— n๊ฐœ์˜ ๋…ธ๋“œ๋“ค์˜ parent๊ฐ€ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ์„ธํŒ…๋˜์–ด ์žˆ๋Š”๋ฐ,
12+
์ฆ‰, ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด n๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋‰˜์–ด์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ union์„ ํ•œ ๋ฒˆ ์‹œํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ๋ฃน์ด 1๊ฐœ
13+
ํ˜น์€ 0๊ฐœ ์ค„์–ด๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ„ ๋ฌธ์ œ์—์„œ๋Š” union์„ ์—ฃ์ง€ ๊ฐœ์ˆ˜ ๋งŒํผ, ์ฆ‰, n-1ํšŒ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ,
14+
๋งŒ์•ฝ union ์‹œํ–‰์—์„œ ๊ทธ๋ฃน์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ(์ฆ‰, ์—ฃ์ง€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์‚ฌ์ดํด์ด ์ƒ๊ธธ ๊ฒฝ์šฐ)๊ฐ€
15+
ํ•œ ๋ฒˆ์ด๋ผ๋„ ๋ฐœ์ƒํ•˜๋ฉด union ์‹œํ–‰ ํ›„ ๊ทธ๋ฃน์˜ ๊ฐœ์ˆ˜๊ฐ€ 2 ์ด์ƒ์ด ๋˜์–ด ๋…ธ๋“œ๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•„ ํŠธ๋ฆฌ๋ฅผ
16+
์ด๋ฃจ์ง€ ๋ชปํ•œ๋‹ค.
17+
"""
18+
19+
"""TC: O(), SC: O()
20+
21+
n์€ ์ฃผ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, e๋Š” ์ฃผ์–ด์ง„ ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜.
22+
23+
์•„์ด๋””์–ด(์ด์–ด์„œ):
24+
- union-find ์•„์ด๋””์–ด๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•œ๋‹ค.
25+
- ๋‚˜์ด๋ธŒํ•œ ์ ‘๊ทผ:
26+
- union์„ ํ†ตํ•ด์„œ ์—ฃ์ง€๋กœ ์—ฐ๊ฒฐ๋œ ๋‘ ์ง‘ํ•ฉ์„ ํ•ฉ์นœ๋‹ค.
27+
- find๋ฅผ ํ†ตํ•ด์„œ 0๋ฒˆ์งธ ๋…ธ๋“œ์™€ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
28+
- ๋” ์ข‹์€ ๊ตฌํ˜„:
29+
- union ์‹œํ–‰ ์ค‘ ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•œ ๋‘ ๋…ธ๋“œ๋ฅผ ํ•ฉ์น˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด False ๋ฆฌํ„ด
30+
31+
SC:
32+
-
33+
34+
TC:
35+
-
36+
"""
37+
38+
39+
class Solution:
40+
"""
41+
@param n: An integer
42+
@param edges: a list of undirected edges
43+
@return: true if it's a valid tree, or false
44+
"""
45+
46+
def valid_tree(self, n, edges):
47+
# write your code here
48+
49+
# union find
50+
parent = list(range(n))
51+
52+
def find(x):
53+
if x == parent[x]:
54+
return x
55+
56+
parent[x] = find(parent[x])
57+
return parent[x]
58+
59+
def union(a, b):
60+
pa = find(a)
61+
pb = find(b)
62+
parent[pb] = pa
63+
64+
# ์›๋ž˜๋Š” ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ, ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•œ ๋…ธ๋“œ๋ฅผ
65+
# unionํ•˜๋ ค๋Š” ์ƒํ™ฉ์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ’ ๋ฆฌํ„ด.
66+
return pa == pb
67+
68+
if len(edges) != n - 1:
69+
# ํŠธ๋ฆฌ์—๋Š” ์—ฃ์ง€๊ฐ€ `(๋…ธ๋“œ ๊ฐœ์ˆ˜) - 1`๊ฐœ ๋งŒํผ ์žˆ๋‹ค.
70+
# ์ด ์กฐ๊ฑด ๋งŒ์กฑ ์•ˆํ•˜๋ฉด ์ปคํŒ….
71+
return False
72+
73+
# ๋‚˜์ด๋ธŒํ•œ ๊ตฌํ˜„:
74+
# - ๋ชจ๋“  ์—ฃ์ง€๋กœ union ์‹œํ–‰
75+
# - find๋กœ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ 0๋ฒˆ ๋…ธ๋“œ์™€ ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋Š”์ง€ ํ™•์ธ
76+
77+
# for e in edges:
78+
# union(*e)
79+
80+
# return all(find(0) == find(i) for i in range(n))
81+
82+
# ๋” ์ข‹์€ ๊ตฌํ˜„:
83+
# - union ์‹œํ–‰ ์ค‘ ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•œ ๋‘ ๋…ธ๋“œ๋ฅผ ํ•ฉ์น˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด False ๋ฆฌํ„ด
84+
for e in edges:
85+
if union(*e):
86+
return False
87+
88+
return True
89+
90+
91+
"""TC: O(), SC: O()
92+
93+
n์€ ์ฃผ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, e๋Š” ์ฃผ์–ด์ง„ ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜.
94+
95+
์•„์ด๋””์–ด(์ด์–ด์„œ):
96+
- union-find๋ฅผ ์“ฐ๋ฉด union์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก์•„๋จน๋Š”๊ฒƒ ๊ฐ™๋‹ค.
97+
- ํŠธ๋ฆฌ๋ฅผ ์ž˜ ์ด๋ค˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ํ•œ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ dfs๋ฅผ ๋Œ๋ ค์„œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์— ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ์ง€
98+
์ฒดํฌํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์ด๊ฒŒ ์‹œ๊ฐ„๋ณต์žก๋„์— ๋” ์œ ๋ฆฌํ•˜์ง€ ์•Š์„๊นŒ?
99+
100+
SC:
101+
-
102+
103+
TC:
104+
-
105+
"""
106+
107+
108+
class Solution:
109+
"""
110+
@param n: An integer
111+
@param edges: a list of undirected edges
112+
@return: true if it's a valid tree, or false
113+
"""
114+
115+
def valid_tree(self, n, edges):
116+
# write your code here
117+
if len(edges) != n - 1:
118+
# ํŠธ๋ฆฌ์—๋Š” ์—ฃ์ง€๊ฐ€ `(๋…ธ๋“œ ๊ฐœ์ˆ˜) - 1`๊ฐœ ๋งŒํผ ์žˆ๋‹ค.
119+
# ์ด ์กฐ๊ฑด ๋งŒ์กฑ ์•ˆํ•˜๋ฉด ์ปคํŒ….
120+
return False
121+
122+
adj_list = [[] for _ in range(n)]
123+
for a, b in edges:
124+
adj_list[a].append(b)
125+
adj_list[b].append(a)
126+
127+
visited = [False for _ in range(n)]
128+
129+
def dfs(node):
130+
visited[node] = True
131+
for adj in adj_list[node]:
132+
if not visited[adj]:
133+
dfs(adj)
134+
135+
# ํ•œ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ visted ๋˜์–ด์•ผ ์ฃผ์–ด์ง„ ์—ฃ์ง€๋“ค๋กœ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
136+
# ์•„๋ฌด ๋…ธ๋“œ์—์„œ๋‚˜ ์ถœ๋ฐœํ•ด๋„ ๋˜๋Š”๋ฐ 0๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜์ž.
137+
dfs(0)
138+
139+
return all(visited)

โ€Žinsert-interval/haklee.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
"""TC: O(n), SC: O(1)
2+
3+
n์€ intervals๋กœ ์ฃผ์–ด์ง„ ์ธํ„ฐ๋ฒŒ์˜ ๊ฐœ์ˆ˜.
4+
5+
์•„์ด๋””์–ด:
6+
- ์ฃผ์–ด์ง„ ์ธํ„ฐ๋ฒŒ๋“ค์„ ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฉด์„œ ์ƒˆ ์ธํ„ฐ๋ฒŒ(newInterval)๊ณผ ๊ฒน์น˜๋Š”์ง€ ๋ณด๊ณ ,
7+
- ๊ฒน์น˜๋ฉด ํ•ฉ์นœ๋‹ค. ํ•ฉ์นœ ์ธํ„ฐ๋ฒŒ๋กœ newInterval์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
8+
- ์•ˆ ๊ฒน์น˜๋ฉด newInterval๊ณผ ํ˜„์žฌ ํ™•์ธ ์ค‘์ธ ์ธํ„ฐ๋ฒŒ(curInterval) ์ค‘์— ํ•„์š”ํ•œ ์ธํ„ฐ๋ฒŒ์„
9+
๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
10+
- ์•ˆ ๊ฒน์น˜๋ฉด,
11+
- ์ด๋•Œ, curInterval์ด newInterval๋ณด๋‹ค ์•ž์— ์žˆ์œผ๋ฉด ์ดํ›„ ์ธํ„ฐ๋ฒŒ๋“ค ์ค‘ newInterval๊ณผ ํ•ฉ์ณ์•ผ ํ•˜๋Š”
12+
์ธํ„ฐ๋ฒŒ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. newInterval์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  curInterval๋งŒ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๋Š”๋‹ค.
13+
- curInterval์ด newInterval๋ณด๋‹ค ๋’ค์— ์žˆ์œผ๋ฉด newInterval์„ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ๋”ํ•ด์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ
14+
curInterval๋„ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ๋”ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
15+
- ๊ทธ๋Ÿฐ๋ฐ curInterval์ด ๋“ค์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ดํ›„์— ์ˆœํšŒํ•  curInterval
16+
์ค‘์—๋Š” ๋” ์ด์ƒ newInterval๊ณผ ๊ฒน์น  ์ธํ„ฐ๋ฒŒ์ด ์—†๋‹ค. newInterval์€ ์ด์ œ ๋” ์ด์ƒ ์“ฐ์ด์ง€
17+
์•Š์œผ๋ฏ€๋กœ None์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
18+
19+
SC:
20+
- newInterval ๊ฐ’๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด์„œ ๊ด€๋ฆฌ. O(1).
21+
22+
TC:
23+
- intervals์— ์žˆ๋Š” ์•„์ดํ…œ์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋งค๋ฒˆ ์ฒดํฌํ•˜๋Š” ์‹œํ–‰์ด O(1).
24+
- ์œ„์˜ ์‹œํ–‰์„ intervals์— ์žˆ๋Š” ์•„์ดํ…œ ์ˆ˜๋งŒํผ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ O(n).
25+
"""
26+
27+
28+
class Solution:
29+
def insert(
30+
self, intervals: List[List[int]], newInterval: List[int]
31+
) -> List[List[int]]:
32+
res = []
33+
for curInterval in intervals:
34+
if newInterval:
35+
# ์•„์ง newInterval์ด None์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค.
36+
if curInterval[1] < newInterval[0]:
37+
# cur, new๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ณ , curInterval์ด ๋” ์•ž์— ์žˆ์Œ.
38+
res.append(curInterval)
39+
elif curInterval[0] > newInterval[1]:
40+
# cur, new๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ณ , newInterval์ด ๋” ์•ž์— ์žˆ์Œ.
41+
res.append(newInterval)
42+
res.append(curInterval)
43+
newInterval = None
44+
else:
45+
# ๊ฒน์น˜๋Š” ๋ถ€๋ถ„ ์กด์žฌ. newInterval์„ ํ™•์žฅํ•œ๋‹ค.
46+
newInterval = [
47+
min(curInterval[0], newInterval[0]),
48+
max(curInterval[1], newInterval[1]),
49+
]
50+
else:
51+
# ๋” ์ด์ƒ newInterval๊ณผ ์—ฐ๊ด€๋œ ์ž‘์—…์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ˆœํšŒ ์ค‘์ธ
52+
# curInterval์„ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ๋”ํ•˜๊ณ  ๋.
53+
res.append(curInterval)
54+
55+
if newInterval:
56+
# intervals์— ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ์•„์ดํ…œ์ด newInterval๊ณผ ๊ฒน์ณค์„ ๊ฒฝ์šฐ ์•„์ง
57+
# ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— newInterval์ด ๋”ํ•ด์ง€์ง€ ์•Š๊ณ  ์•ž์„  ์ˆœํšŒ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์„
58+
# ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ newInterval์ด ์•„์ง None์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฆฌ์ŠคํŠธ์— ๋”ํ•ด์ค€๋‹ค.
59+
res.append(newInterval)
60+
61+
return res
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""TC: O(n), SC: O(h)
2+
3+
h๋Š” ์ฃผ์–ด์ง„ ํŠธ๋ฆฌ์˜ ๋†’์ด, n์€ ์ฃผ์–ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜.
4+
5+
์•„์ด๋””์–ด:
6+
ํŠน์ • ๋…ธ๋“œ์˜ ๊นŠ์ด๋Š” `max(์˜ค๋ฅธ์ชฝ ๊นŠ์ด, ์™ผ์ชฝ ๊นŠ์ด) + 1`์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•˜์ž๋‹ˆ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊นŠ์ด ๊ฐ’์ด
7+
์ž์‹์˜ ๊นŠ์ด ๊ฐ’๋ณด๋‹ค ๋” ํฐ ๊ฒƒ์ด ์ด์ƒํ•˜๊ธด ํ•œ๋ฐ... ํฐ ๋งฅ๋ฝ์—์„œ ๋ฌด์Šจ ๋ง์„ ํ•˜๊ณ  ์‹ถ์€์ง€๋Š” ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ 
8+
๋ณธ๋‹ค.
9+
10+
SC:
11+
- ํ˜ธ์ถœ ์Šคํƒ์€ ํŠธ๋ฆฌ์˜ ๋†’์ด(...ํ˜น์€ ๊นŠ์ด)๋งŒํผ ์ปค์ง„๋‹ค. O(h).
12+
13+
TC:
14+
- ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค. O(n).
15+
"""
16+
17+
18+
# Definition for a binary tree node.
19+
# class TreeNode:
20+
# def __init__(self, val=0, left=None, right=None):
21+
# self.val = val
22+
# self.left = left
23+
# self.right = right
24+
class Solution:
25+
def maxDepth(self, root: Optional[TreeNode]) -> int:
26+
def get_depth(node: Optional[TreeNode]) -> int:
27+
return max(get_depth(node.left), get_depth(node.right)) + 1 if node else 0
28+
29+
return get_depth(root)

0 commit comments

Comments
ย (0)