Skip to content

Commit d13ec0d

Browse files
Merge pull request #1374 from taurus09318976/main
[taurus09318976] WEEK04 Solutions
2 parents 291986b + a1bf24a commit d13ec0d

File tree

5 files changed

+294
-0
lines changed

5 files changed

+294
-0
lines changed

โ€Žcoin-change/taurus09318976.py

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
'''
2+
์ด ๋ฌธ์ œ๋Š” ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•œ ๋ฐฉ์‹์ด
3+
1) ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ณ ,
4+
2) ์ค‘๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๊ณ ,
5+
3) ์ตœ์ ์˜ ๊ฐ’์„ ๋ณด์žฅํ•œ๋‹ค๋Š” ์ ์—์„œ ์ข‹์€ ํ’€์ด๋ฐฉ์‹์ž„.
6+
๋‹ค๋งŒ,
7+
1) amount๊ฐ€ ํด ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๋งŽ์„ ์ˆ˜ ์žˆ๊ณ ,
8+
2) ๋™์ „์˜ ๊ฐ€์น˜๊ฐ€ ๋งค์šฐ ์ž‘์„ ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋‹จ์ ์ด ์žˆ์Œ
9+
'''
10+
11+
class Solution:
12+
def coinChange(self, coins: List[int], amount: int) -> int:
13+
# ์ดˆ๊ธฐํ™”
14+
# dp ๋ฐฐ์—ด: ๊ฐ ๊ธˆ์•ก์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋™์ „ ์ˆ˜๋ฅผ ์ €์žฅ
15+
# amount + 1๋กœ ์ดˆ๊ธฐํ™” (๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด)
16+
# 0์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋™์ „ ์ˆ˜๋Š” 0
17+
dp = [amount + 1] * (amount + 1)
18+
dp[0] = 0
19+
20+
# ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹คํ–‰:
21+
# 1์›๋ถ€ํ„ฐ amount์›๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ณ„์‚ฐ
22+
for i in range(1, amount + 1):
23+
# ๊ฐ ๋™์ „์— ๋Œ€ํ•ด ์‹œ๋„
24+
for coin in coins:
25+
# ํ˜„์žฌ ๊ธˆ์•ก์ด ๋™์ „๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ์‹œ๋„
26+
if i >= coin:
27+
# ํ˜„์žฌ ๋™์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์™€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ค‘ ์ตœ์†Œ๊ฐ’ ์„ ํƒ
28+
dp[i] = min(dp[i], dp[i - coin] + 1)
29+
30+
# ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
31+
# amount์›์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ -1 ๋ฐ˜ํ™˜
32+
return dp[amount] if dp[amount] != amount + 1 else -1
33+
34+
# ์‹œ๊ฐ„ ๋ณต์žก๋„ (Time Complexity): O(n * m)
35+
#n: amount
36+
#m: coins์˜ ๊ธธ์ด
37+
#์ด์œ :
38+
#amount๊นŒ์ง€์˜ ๋ชจ๋“  ๊ธˆ์•ก์— ๋Œ€ํ•ด ๊ณ„์‚ฐ
39+
#๊ฐ ๊ธˆ์•ก๋งˆ๋‹ค ๋ชจ๋“  ๋™์ „์„ ํ™•์ธ
40+
#๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n * m)
41+
# ๊ณต๊ฐ„ ๋ณต์žก๋„ (Space Complexity): O(n)
42+
# n: amount
43+
#์ด์œ :
44+
# dp ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ amount + 1
45+
# ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์—†์Œ
46+
# ๋”ฐ๋ผ์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class Solution:
2+
#findMin ๋ฉ”์„œ๋“œ๋Š” ์ •์ˆ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
3+
def findMin(self, nums: List[int]) -> int:
4+
# ๋ฐฐ์—ด์˜ ์‹œ์ž‘๊ณผ ๋ ์ธ๋ฑ์Šค ์„ค์ •
5+
## left๋Š” ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค, right๋Š” ๋ฐฐ์—ด์˜ ๋ ์ธ๋ฑ์Šค. len(nums) - 1
6+
left, right = 0, len(nums) - 1
7+
8+
#์™„์ „ํžˆ ์ •๋ ฌ๋˜์–ด ๋ฐฐ์—ด์ด ํšŒ์ „๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์ตœ์†Œ๊ฐ’
9+
if nums[left] < nums[right]:
10+
return nums[left]
11+
12+
# ์ด์ง„ ํƒ์ƒ‰ ์‹คํ–‰ : left < right์ธ ๋™์•ˆ ๋ฐ˜๋ณต๋˜๋ฉฐ, ๊ฒ€์ƒ‰ ๋ฒ”์œ„๊ฐ€ 1๊ฐœ ์ด์ƒ์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋จ
13+
while left < right:
14+
# ์ค‘๊ฐ„ ์ธ๋ฑ์Šค ๊ณ„์‚ฐ : ์ค‘๊ฐ„๊ฐ’๊ณผ ์˜ค๋ฅธ์ชฝ ๋๊ฐ’ ๋น„๊ต ํ›„, ๋น„๊ต ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰ ๋ฒ”์œ„ ์กฐ์ •
15+
mid = (left + right) // 2
16+
17+
# ์ค‘๊ฐ„๊ฐ’์ด ์˜ค๋ฅธ์ชฝ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ
18+
# -> ์ตœ์†Œ๊ฐ’์€ ์ค‘๊ฐ„๊ฐ’ ์˜ค๋ฅธ์ชฝ์— ์žˆ์Œ
19+
if nums[mid] > nums[right]:
20+
left = mid + 1
21+
# ์ค‘๊ฐ„๊ฐ’์ด ์˜ค๋ฅธ์ชฝ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ
22+
# -> ์ตœ์†Œ๊ฐ’์€ ์ค‘๊ฐ„๊ฐ’ ํฌํ•จ ์™ผ์ชฝ์— ์žˆ์Œ
23+
else:
24+
right = mid
25+
26+
# ์ตœ์ข…์ ์œผ๋กœ ์ฐพ์€ ์ตœ์†Œ๊ฐ’ ๋ฐ˜ํ™˜
27+
return nums[left]
28+
29+
# ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
30+
print(Solution().findMin([3, 4, 5, 1, 2])) # ์ถœ๋ ฅ: 1
31+
print(Solution().findMin([4, 5, 6, 7, 0, 1, 2])) # ์ถœ๋ ฅ: 0
32+
print(Solution().findMin([1])) # ์ถœ๋ ฅ: 1
33+
34+
35+
#์‹œ๊ฐ„ ๋ณต์žก๋„ (Time Complexity): O(log n)
36+
#์ด์œ :
37+
#์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
38+
#๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ๊ฒ€์ƒ‰ ๋ฒ”์œ„๊ฐ€ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ฆ
39+
#n๊ฐœ์˜ ์š”์†Œ๋ฅผ logโ‚‚n ๋ฒˆ์˜ ๋น„๊ต๋กœ ๊ฒ€์ƒ‰
40+
#์˜ˆ์‹œ:
41+
#n = 8: ์ตœ๋Œ€ 3๋ฒˆ์˜ ๋น„๊ต (logโ‚‚8 = 3)
42+
#n = 16: ์ตœ๋Œ€ 4๋ฒˆ์˜ ๋น„๊ต (logโ‚‚16 = 4)
43+
#๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(log n)
44+
#๊ณต๊ฐ„ ๋ณต์žก๋„ (Space Complexity): O(1)
45+
#์ด์œ :
46+
#์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
47+
#์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜:
48+
#left, right, mid: ์ƒ์ˆ˜ ๊ฐœ์ˆ˜์˜ ์ •์ˆ˜ ๋ณ€์ˆ˜
49+
#์ž…๋ ฅ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ์ผ์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์‚ฌ์šฉ
50+
#๋”ฐ๋ผ์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)
51+
52+
53+
54+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค
2+
class TreeNode:
3+
def __init__(self, val=0, left=None, right=None):
4+
self.val = val # ๋…ธ๋“œ์˜ ๊ฐ’
5+
self.left = left # ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ
6+
self.right = right # ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ
7+
8+
9+
class Solution:
10+
def maxDepth(self, root: TreeNode) -> int:
11+
# ์ดˆ๊ธฐ ์กฐ๊ฑด ํ™•์ธ. ํŠธ๋ฆฌ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊นŠ์ด๋Š” 0
12+
if not root:
13+
return 0
14+
15+
# ํ์— ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€, ๊นŠ์ด๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
16+
queue = [root]
17+
depth = 0
18+
19+
# ๋„ˆ๋น„์šฐ์„  ํƒ์ƒ‰(BFS) ์‹คํ–‰. ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์€ ๋™์•ˆ ๋ฐ˜๋ณต
20+
while queue:
21+
# ์ƒˆ๋กœ์šด ๋ ˆ๋ฒจ ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ๊นŠ์ด ์ฆ๊ฐ€
22+
depth += 1
23+
# ํ˜„์žฌ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ ์ˆ˜ ์ €์žฅ
24+
level_size = len(queue)
25+
26+
# ํ˜„์žฌ ๋ ˆ๋ฒจ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ
27+
for _ in range(level_size):
28+
# ํ์—์„œ ๋…ธ๋“œ ํ•˜๋‚˜ ๊บผ๋‚ด๊ธฐ
29+
node = queue.pop(0)
30+
31+
# ์ž์‹ ๋…ธ๋“œ ์ฒ˜๋ฆฌ. ๋‹ค์Œ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋“ค์ด ๋จ
32+
## ์™ผ์ชฝ ์ž์‹์ด ์žˆ์œผ๋ฉด ํ์— ์ถ”๊ฐ€
33+
if node.left:
34+
queue.append(node.left)
35+
## ์˜ค๋ฅธ์ชฝ ์ž์‹์ด ์žˆ์œผ๋ฉด ํ์— ์ถ”๊ฐ€
36+
if node.right:
37+
queue.append(node.right)
38+
39+
# ์ตœ์ข… ๊นŠ์ด ๋ฐ˜ํ™˜
40+
return depth
41+
42+
#์‹œ๊ฐ„ ๋ณต์žก๋„ (Time Complexity): O(n)
43+
#n: ํŠธ๋ฆฌ์˜ ์ด ๋…ธ๋“œ ์ˆ˜
44+
#์ด์œ :
45+
#๊ฐ ๋…ธ๋“œ๋ฅผ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธ
46+
#๊ฐ ๋…ธ๋“œ์—์„œ์˜ ์—ฐ์‚ฐ(์ถ”๊ฐ€, ์ œ๊ฑฐ)์€ ์ƒ์ˆ˜ ์‹œ๊ฐ„
47+
#๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)
48+
#๊ณต๊ฐ„ ๋ณต์žก๋„ (Space Complexity): O(n)
49+
#์ตœ์•…์˜ ๊ฒฝ์šฐ: O(n)
50+
#ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ: O(n/2) โ‰ˆ O(n)
51+
#์ด์œ :
52+
#ํ์— ์ €์žฅ๋˜๋Š” ์ตœ๋Œ€ ๋…ธ๋“œ ์ˆ˜๋Š” ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๋„ˆ๋น„
53+
#์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์— ์•ฝ n/2๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ
54+
#๋”ฐ๋ผ์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค
2+
class ListNode:
3+
def __init__(self, val=0, next=None):
4+
# ๋…ธ๋“œ์˜ ๊ฐ’
5+
self.val = val
6+
# ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
7+
self.next = next
8+
9+
10+
class Solution:
11+
def mergeTwoLists(self, list1: ListNode, list2: ListNode):
12+
# ๋”๋ฏธ ๋…ธ๋“œ ์ƒ์„ฑ - ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘์ ์œผ๋กœ ์‚ฌ์šฉ
13+
dummy = ListNode()
14+
# ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜๋Š” ํฌ์ธํ„ฐ
15+
current = dummy
16+
17+
# ๋ณ‘ํ•ฉ๊ณผ์ • : ๋‘ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ์กด์žฌํ•˜๋Š” ๋™์•ˆ ๋ฐ˜๋ณต,
18+
# ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ด ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€,
19+
# ์„ ํƒ๋œ ๋ฆฌ์ŠคํŠธ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™
20+
# ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์˜ ํฌ์ธํ„ฐ๋„ ๋‹ค์Œ์œผ๋กœ ์ด๋™
21+
while list1 and list2:
22+
# list 1์˜ ๊ฐ’์ด list2์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ
23+
if list1.val <= list2.val:
24+
# list1์˜ ๋…ธ๋“œ๋ฅผ ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€
25+
current.next = list1
26+
#list1์˜ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™
27+
list1 = list1.next
28+
else:
29+
#list2์˜ ๋…ธ๋“œ๋ฅผ ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€
30+
current.next = list2
31+
#list2์˜ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™
32+
list2 = list2.next
33+
#๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์Œ์œผ๋กœ ์ด๋™
34+
current = current.next
35+
36+
# ํ•œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ์˜ ๋‚จ์€ ๋…ธ๋“œ๋“ค์„ ๋ชจ๋‘ ์—ฐ๊ฒฐ
37+
## list1์— ๋‚จ์€ ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋‘ ์—ฐ๊ฒฐ
38+
if list1:
39+
current.next = list1
40+
41+
## list2์— ๋‚จ์€ ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋‘ ์—ฐ๊ฒฐ
42+
else:
43+
current.next = list2
44+
45+
# ๋”๋ฏธ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ถ€ํ„ฐ๊ฐ€ ์‹ค์ œ ๊ฒฐ๊ณผ
46+
return dummy.next
47+
48+
49+
#์‹œ๊ฐ„ ๋ณต์žก๋„ (Time Complexity): O(n + m)
50+
#n: list1์˜ ๊ธธ์ด
51+
#m: list2์˜ ๊ธธ์ด
52+
#์ด์œ :
53+
#๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธ
54+
#๊ฐ ๋…ธ๋“œ์—์„œ์˜ ์—ฐ์‚ฐ(๋น„๊ต, ์—ฐ๊ฒฐ)์€ ์ƒ์ˆ˜ ์‹œ๊ฐ„
55+
#๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n + m)
56+
#๊ณต๊ฐ„ ๋ณต์žก๋„ (Space Complexity): O(1)
57+
#์ด์œ :
58+
#์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
59+
#์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜:
60+
#dummy: ์ƒ์ˆ˜ ๊ณต๊ฐ„
61+
#current: ์ƒ์ˆ˜ ๊ณต๊ฐ„
62+
#์ž…๋ ฅ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ์ผ์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์‚ฌ์šฉ
63+
#๋”ฐ๋ผ์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)
64+

โ€Žword-search/taurus09318976.py

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์ดํ•จ
2+
class Solution:
3+
def exist(self, board: List[List[str]], word: str) -> bool:
4+
# ๋ณด๋“œ์˜ ํ–‰๊ณผ ์—ด ์ˆ˜
5+
rows, cols = len(board), len(board[0])
6+
# ๋ฐฉ๋ฌธํ•œ ์…€์„ ์ถ”์ ํ•˜๋Š” ์ง‘ํ•ฉ
7+
visited = set()
8+
9+
# ๊นŠ์ด์šฐ์„  ํƒ์ƒ‰(DFS) ํ•จ์ˆ˜ ์ •์˜
10+
#r, c์€ ํ˜„์žฌ ์…€์˜ ํ–‰๊ณผ ์—ด, i๋Š” ํ˜„์žฌ ์ฐพ๊ณ  ์žˆ๋Š” ๋‹จ์–ด์˜ ์ธ๋ฑ์Šค
11+
def dfs(r, c, i):
12+
#๊ธฐ๋ณธ ์กฐ๊ฑด ํ™•์ธ
13+
# ๋‹จ์–ด์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ ์„ฑ๊ณต
14+
if i == len(word):
15+
return True
16+
17+
#์œ ํšจ์„ฑ ๊ฐ์‚ฌ
18+
# ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜ ํ˜„์žฌ ์…€์˜ ๋ฌธ์ž๊ฐ€ ๋‹จ์–ด์˜ ํ˜„์žฌ ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
19+
# ๋ฒ”์œ„ ๊ฒ€์‚ฌ
20+
if r < 0 or r >= rows or c < 0 or c >= cols:
21+
return False
22+
23+
# ๋ฐฉ๋ฌธ ๋ฐ ๋ฌธ์ž ์ผ์น˜ ๊ฒ€์‚ฌ
24+
if (r, c) in visited or board[r][c] != word[i]:
25+
return False
26+
27+
# ํ˜„์žฌ ์…€์„ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œ
28+
visited.add((r, c))
29+
30+
# ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰
31+
result = (dfs(r + 1, c, i + 1) or # ์•„๋ž˜
32+
dfs(r - 1, c, i + 1) or # ์œ„
33+
dfs(r, c + 1, i + 1) or # ์˜ค๋ฅธ์ชฝ
34+
dfs(r, c - 1, i + 1)) # ์™ผ์ชฝ
35+
36+
# ๋ฐฑํŠธ๋ž˜ํ‚น: ํ˜„์žฌ ์…€์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ
37+
#ํ˜„์žฌ ๊ฒฝ๋กœ๊ฐ€ ์‹คํŒจํ–ˆ์œผ๋ฏ€๋กœ ๋ฐฉ๋ฌธ ํ‘œ์‹œ ์ œ๊ฑฐ
38+
visited.remove((r, c))
39+
40+
return result
41+
42+
# ๋ณด๋“œ์˜ ๋ชจ๋“  ์…€์—์„œ ์‹œ์ž‘์ ์œผ๋กœ ์‹œ๋„
43+
for r in range(rows):
44+
for c in range(cols):
45+
if dfs(r, c, 0):
46+
return True
47+
48+
return False
49+
50+
#์‹œ๊ฐ„ ๋ณต์žก๋„ (Time Complexity): O(m * n * 4^L)
51+
#m: ๋ณด๋“œ์˜ ํ–‰ ์ˆ˜
52+
#n: ๋ณด๋“œ์˜ ์—ด ์ˆ˜
53+
#L: ๋‹จ์–ด์˜ ๊ธธ์ด
54+
#์ด์œ :
55+
#๊ฐ ์…€์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ: O(m * n)
56+
#๊ฐ ์œ„์น˜์—์„œ 4๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ ๊ฐ€๋Šฅ: O(4^L)
57+
#์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ
58+
#๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(m * n * 4^L)
59+
#๊ณต๊ฐ„ ๋ณต์žก๋„ (Space Complexity): O(L)
60+
#L: ๋‹จ์–ด์˜ ๊ธธ์ด
61+
#์ด์œ :
62+
#์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด๋Š” ๋‹จ์–ด์˜ ๊ธธ์ด์— ๋น„๋ก€
63+
#visited ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ๋„ ๋‹จ์–ด์˜ ๊ธธ์ด์— ๋น„๋ก€
64+
#๋”ฐ๋ผ์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(L)
65+
66+
#DFS vs BFS ๋น„๊ต:
67+
#DFS (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰):
68+
#ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋๊นŒ์ง€ ํƒ์ƒ‰
69+
#์Šคํƒ/์žฌ๊ท€ ์‚ฌ์šฉ
70+
#๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ ์Œ
71+
#์ตœ๋‹จ ๊ฒฝ๋กœ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
72+
#BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰):
73+
#๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰
74+
#ํ ์‚ฌ์šฉ
75+
#๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๋งŽ์Œ
76+
#์ตœ๋‹จ ๊ฒฝ๋กœ ๋ณด์žฅ

0 commit comments

Comments
ย (0)