Skip to content

Commit 9eaa936

Browse files
authored
Merge pull request #1470 from KwonNayeon/main
[KwonNayeon] Week 7 solutions
2 parents e6de11e + d737da0 commit 9eaa936

File tree

6 files changed

+162
-33
lines changed

6 files changed

+162
-33
lines changed

โ€Žlongest-substring-without-repeating-characters/KwonNayeon.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,34 @@
1515
3. ์ค‘๋ณต ๋ฌธ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด ์œˆ๋„์šฐ์˜ ์‹œ์ž‘์ (current_start)์„ ์ค‘๋ณต ๋ฌธ์ž ๋‹ค์Œ ์œ„์น˜๋กœ ์ด๋™
1616
4. ๋งค ๋‹จ๊ณ„์—์„œ ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
1717
5. ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์žฅ ๊ธด ์ค‘๋ณต ์—†๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๋ฐ˜ํ™˜
18+
19+
๋…ธํŠธ:
20+
- ์ฒ˜์Œ์— ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„: ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ, ์ง€๊ธˆ๊นŒ์ง€ ์บ๋ฆญํ„ฐ๊ฐ€ ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•จ
21+
- ์‹ค์ œ๋กœ๋Š” ๊ฐ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ์ €์žฅํ•˜๋Š” ์šฉ๋„์ž„
1822
"""
1923

24+
# e.g., s = "abca"
2025
class Solution:
2126
def lengthOfLongestSubstring(self, s: str) -> int:
22-
seen = {}
27+
seen = {} # ๊ฐ ๋ฌธ์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ฑ์žฅํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ
2328
current_start = 0
2429
max_length = 0
2530

2631
for i in range(len(s)):
2732
char = s[i]
2833

34+
# ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ด๋ฏธ ๋“ฑ์žฅํ–ˆ๊ณ , ๊ทธ ์œ„์น˜๊ฐ€ ํ˜„์žฌ ๊ณ ๋ ค ์ค‘์ธ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋‚ด์— ์žˆ๋Š” ๊ฒฝ์šฐ
2935
if char in seen and seen[char] >= current_start:
36+
37+
# ์ค‘๋ณต ๋ฐœ์ƒ, ์œˆ๋„์šฐ ์‹œ์ž‘์ ์„ ์ด์ „ ๋“ฑ์žฅ ์œ„์น˜ ๋‹ค์Œ์œผ๋กœ ์ด๋™
3038
current_start = seen[char] + 1
3139

3240
seen[char] = i
3341

42+
# ํ˜„์žฌ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๊ณ„์‚ฐ (ํ˜„์žฌ ์ธ๋ฑ์Šค - ์‹œ์ž‘ ์ธ๋ฑ์Šค + 1)
3443
current_length = i - current_start + 1
44+
45+
# ์ตœ๋Œ€ ๊ธธ์ด ์—…๋ฐ์ดํŠธ
3546
max_length = max(current_length, max_length)
3647

3748
return max_length

โ€Žnumber-of-islands/KwonNayeon.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
- ์ตœ์•…์˜ ๊ฒฝ์šฐ(๋ชจ๋“  ์…€์ด '1'์ผ ๋•Œ) m * n ๋งŒํผ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ ์‚ฌ์šฉ
1414
1515
ํ’€์ด ๋ฐฉ๋ฒ•:
16-
1. 2์ค‘ for๋ฌธ์œผ๋กœ ๊ทธ๋ฆฌ๋“œ์˜ ๋ชจ๋“  ์…€์„ ์ˆœํšŒ
17-
2. '1'์„ ๋ฐœ๊ฒฌํ•˜๋ฉด DFS๋กœ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋•…์„ ๋ฐฉ๋ฌธํ•˜๊ณ  '0'์œผ๋กœ ํ‘œ์‹œ
18-
3. '1'์„ ๋ฐœ๊ฒฌํ•  ๋•Œ๋งˆ๋‹ค islands ์นด์šดํŠธ๋ฅผ 1์”ฉ ์ฆ๊ฐ€
16+
1. numIslands ๋ฉ”์„œ๋“œ: ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ '1'์„ ์ฐพ๊ณ  ์„ฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ์—ญํ• 
17+
2. visit_island ๋ฉ”์„œ๋“œ: ํ•˜๋‚˜์˜ ์„ฌ์„ ์™„์ „ํžˆ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐฉ๋ฌธํ•œ ๋•…์„ '0'์œผ๋กœ ๋ฐ”๊พธ๋Š” ์—ญํ• 
18+
3. ๋‘ ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹:
19+
- numIslands๋Š” ์„ฌ์˜ ์‹œ์ž‘์ ('1')์„ ์ฐพ์•„ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ด
20+
- visit_island๋Š” ์ฐพ์€ ์„ฌ์„ ์™„์ „ํžˆ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐฉ๋ฌธ ํ‘œ์‹œ('0'์œผ๋กœ ๋ณ€๊ฒฝ)
1921
"""
2022

2123
class Solution:
@@ -29,14 +31,17 @@ def numIslands(self, grid: List[List[str]]) -> int:
2931
return islands
3032

3133
def visit_island(self, grid, i, j):
34+
# base case: ์œ„์น˜๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ '1'์ด ์•„๋‹ˆ๋ฉด ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ
3235
if (i < 0 or i >= len(grid) or
3336
j < 0 or j >= len(grid[0]) or
3437
grid[i][j] != '1'):
3538
return
3639

40+
# ๋ฐฉ๋ฌธํ•œ ๋•…์„ '0'์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋„๋ก ํ•จ
3741
grid[i][j] = '0'
3842

39-
self.visit_island(grid, i+1, j) # ์œ„
40-
self.visit_island(grid, i-1, j) # ์•„๋ž˜
43+
# ๋„ค ๋ฐฉํ–ฅ(์•„๋ž˜, ์œ„, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ)์œผ๋กœ DFS ์žฌ๊ท€ ํ˜ธ์ถœ
44+
self.visit_island(grid, i+1, j) # ์•„๋ž˜
45+
self.visit_island(grid, i-1, j) # ์œ„
4146
self.visit_island(grid, i, j+1) # ์˜ค๋ฅธ์ชฝ
4247
self.visit_island(grid, i, j-1) # ์™ผ์ชฝ

โ€Žreverse-bits/KwonNayeon.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
"""
22
Constraints:
3-
- The input must be a binary string of length 32
4-
3+
- The input must be a binary string of length 32
4+
5+
<Solution 1>
6+
57
Time Complexity: O(1)
6-
- ํ•ญ์ƒ ๊ณ ์ •๋œ 32๋น„ํŠธ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ์—ฐ์‚ฐํ•˜๋ฏ€๋กœ ์ƒ์ˆ˜ ์‹œ๊ฐ„
8+
- ํ•ญ์ƒ ๊ณ ์ •๋œ 32๋น„ํŠธ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ์—ฐ์‚ฐํ•˜๋ฏ€๋กœ ์ƒ์ˆ˜ ์‹œ๊ฐ„
79
810
Space Complexity: O(1)
9-
- 32๋น„ํŠธ ๊ณ ์ • ํฌ๊ธฐ์˜ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ƒ์ˆ˜ ๊ณต๊ฐ„
11+
- 32๋น„ํŠธ ๊ณ ์ • ํฌ๊ธฐ์˜ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ƒ์ˆ˜ ๊ณต๊ฐ„
1012
1113
ํ’€์ด ๋ฐฉ๋ฒ•:
12-
1. format(n, '032b')๋ฅผ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ๋ฐ›์€ ์ •์ˆ˜๋ฅผ 32๋น„ํŠธ ์ด์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•จ
13-
2. ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ [::-1]์œผ๋กœ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์Œ
14-
3. int(reversed_binary, 2)๋กœ ๋’ค์ง‘์€ ์ด์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•จ
14+
1. format(n, '032b')๋ฅผ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ๋ฐ›์€ ์ •์ˆ˜๋ฅผ 32๋น„ํŠธ ์ด์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•จ
15+
2. ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ [::-1]์œผ๋กœ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์Œ
16+
3. int(reversed_binary, 2)๋กœ ๋’ค์ง‘์€ ์ด์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•จ
1517
"""
1618

1719
class Solution:
@@ -22,3 +24,12 @@ def reverseBits(self, n: int) -> int:
2224
reversed_binary = binary[::-1]
2325

2426
return int(reversed_binary, 2)
27+
"""
28+
<Solution 2>
29+
30+
Time Complexity:
31+
32+
Space Complexity:
33+
34+
ํ’€์ด ๋ฐฉ๋ฒ•:
35+
"""

โ€Žreverse-linked-list/KwonNayeon.py

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
- The number of nodes in the list is the range [0, 5000]
44
- -5000 <= Node.val <= 5000
55
6+
<Solution 1>
7+
68
Time Complexity: O(n)
79
- n์€ linked list์˜ ๋…ธ๋“œ ์ˆ˜
8-
- ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธํ•˜๊ธฐ ๋•Œ๋ฌธ
10+
- ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธ
911
1012
Space Complexity: O(1)
1113
- ์ถ”๊ฐ€ ๊ณต๊ฐ„์œผ๋กœ prev, curr, temp ์„ธ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋งŒ ์‚ฌ์šฉ
12-
- ์ž…๋ ฅ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ์ผ์ •ํ•œ ์ถ”๊ฐ€ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉ
14+
- ์ž…๋ ฅ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ์ผ์ •ํ•œ ์ถ”๊ฐ€ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉํ•จ
1315
1416
ํ’€์ด ๋ฐฉ๋ฒ•:
1517
1. ์„ธ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋’ค์ง‘๊ธฐ
@@ -45,3 +47,49 @@ def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
4547
curr = temp
4648

4749
return prev
50+
51+
"""
52+
<Solution 2>
53+
54+
Time Complexity: O(n)
55+
- ์Šคํƒ์— ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋„ฃ์„ ๋•Œ/๋บ„ ๋•Œ ๊ฐ O(n) ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•จ
56+
57+
Space Complexity: O(n)
58+
- ์Šคํƒ์— ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋„ฃ์—ˆ๋‹ค๊ฐ€ ๋นผ์•ผ ํ•˜๋ฏ€๋กœ
59+
60+
ํ’€์ด๋ฐฉ๋ฒ•:
61+
- ์Šคํƒ์˜ LIFO ํŠน์„ฑ์„ ํ™œ์šฉ
62+
63+
๋…ธํŠธ:
64+
- ํ’€์ด 1๋ณด๋‹ค ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€์ง€๋งŒ, ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ’€์ด
65+
"""
66+
67+
class Solution:
68+
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
69+
# ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•  ๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
70+
nodes = []
71+
72+
# ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํ—ค๋“œ๋กœ ์ดˆ๊ธฐํ™”
73+
node = head
74+
75+
# ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
76+
while node:
77+
nodes.append(node)
78+
node = node.next
79+
80+
# ์ƒˆ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘์ ์ด ๋  ๋”๋ฏธ ๋…ธ๋“œ
81+
dummy = ListNode(-1)
82+
83+
# ์ƒˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํฌ์ธํ„ฐ ์ดˆ๊ธฐํ™”
84+
node = dummy
85+
86+
# nodes ๋ฆฌ์ŠคํŠธ์—์„œ ์—ญ์ˆœ์œผ๋กœ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด์„œ ์ƒˆ ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ
87+
while nodes:
88+
node.next = nodes.pop() # ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด์„œ ์—ฐ๊ฒฐ
89+
node = node.next # ๋…ธ๋“œ ์ด๋™
90+
91+
# ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ next๋ฅผ None์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ข…๋ฃŒ
92+
node.next = None
93+
94+
# ๋”๋ฏธ ๋…ธ๋“œ์˜ next = ๋’ค์ง‘ํžŒ ๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋“œ
95+
return dummy.next

โ€Žset-matrix-zeroes/KwonNayeon.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
- 1 <= m, n <= 200
66
- -2^31 <= matrix[i][j] <= 2^31 - 1
77
8-
Time Complexity: O(m*n)
9-
- m์€ ํ–‰, n์€ ์—ด์„ ์˜๋ฏธ
10-
- 0 ์ฐพ๊ธฐ: O(m*n)
11-
- ํ–‰๊ณผ ์—ด ๋ณ€ํ™˜: O(m*n)
8+
<Solution 1>
129
13-
Space Complexity: O(m*n)
14-
- zeros ๋ฐฐ์—ด์ด ์ตœ๋Œ€ m*n ํฌ๊ธฐ๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ
10+
Time Complexity: O(m * n)
11+
- m์€ ํ–‰, n์€ ์—ด์„ ์˜๋ฏธํ•จ
12+
- 0 ์ฐพ๊ธฐ: O(m * n)
13+
- ํ–‰๊ณผ ์—ด ๋ณ€ํ™˜: O(m * n)
14+
15+
Space Complexity: O(m * n)
16+
- zeros ๋ฐฐ์—ด์ด ์ตœ๋Œ€ m * n ํฌ๊ธฐ๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ
1517
1618
ํ’€์ด ๋ฐฉ๋ฒ•:
17-
1. 0 ์œ„์น˜ ์ €์žฅ
19+
1. 0 ์œ„์น˜๋ฅผ ํƒ์ƒ‰/์ €์žฅ
1820
2. ์ €์žฅ๋œ 0์˜ ํ–‰๊ณผ ์—ด์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€ํ™˜
19-
3. ์ฃผ์˜์ : ํ–‰๋ ฌ ๊ฐ’ ํƒ์ƒ‰๊ณผ ๋ณ€๊ฒฝ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋ฉด ์›๋ž˜ ์–ด๋–ค ๊ฐ’์ด 0์ด์—ˆ๋Š”์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง
2021
"""
21-
2222
class Solution:
2323
def setZeroes(self, matrix: List[List[int]]) -> None:
2424
"""
@@ -32,17 +32,21 @@ def setZeroes(self, matrix: List[List[int]]) -> None:
3232
zeros.append((r, c))
3333

3434
for r, c in zeros:
35+
# ํ–‰(row)์„ 0์œผ๋กœ ์ฑ„์›€
3536
for i in range(len(matrix[0])):
3637
matrix[r][i] = 0
38+
# ์—ด(column)์„ 0์œผ๋กœ ์ฑ„์›€
3739
for i in range(len(matrix)):
3840
matrix[i][c] = 0
3941

4042
"""
41-
Time Complexity: O(m*n)
42-
- ํ–‰๋ ฌ ์ˆœํšŒ: O(m*n)
43-
- ํ–‰๊ณผ ์—ด ๋ณ€ํ™˜: O(m*n)
43+
<Solution 2>
44+
45+
Time Complexity: O(m * n)
46+
- ํ–‰๋ ฌ ์ˆœํšŒ: O(m * n)
47+
- ํ–‰๊ณผ ์—ด ๋ณ€ํ™˜: O(m * n)
4448
45-
Space Complexity: O(m+n)
49+
Space Complexity: O(m + n)
4650
- zero_rows: O(m)
4751
- zero_cols: O(n)
4852
@@ -51,7 +55,6 @@ def setZeroes(self, matrix: List[List[int]]) -> None:
5155
2. ํ–‰๊ณผ ์—ด ์ •๋ณด๋ฅผ ๋ถ„๋ฆฌ ์ €์žฅํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ
5256
3. ํ–‰๊ณผ ์—ด์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต ์—ฐ์‚ฐ ์ œ๊ฑฐ
5357
"""
54-
5558
class Solution:
5659
def setZeroes(self, matrix: List[List[int]]) -> None:
5760
"""
@@ -75,7 +78,9 @@ def setZeroes(self, matrix: List[List[int]]) -> None:
7578
matrix[i][c] = 0
7679

7780
"""
78-
Time Complexity: O(m*n)
81+
<Solution 3>
82+
83+
Time Complexity: O(m * n)
7984
8085
Space Complexity: O(1)
8186
- ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฒซ ํ–‰๊ณผ ์—ด์„ ๋งˆ์ปค๋กœ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ

โ€Žunique-paths/KwonNayeon.py

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
Constraints:
33
- 1 <= m, n <= 100
44
5+
<Solution 1: ์กฐํ•ฉ ํ™œ์šฉ>
6+
57
Time Complexity: O(1)
68
- math.comb() ์‚ฌ์šฉ
79
@@ -13,11 +15,58 @@
1315
1. (m-1)๋ฒˆ ์•„๋ž˜๋กœ, (n-1)๋ฒˆ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€์•ผํ•จ -> ์ด (m+n-2)๋ฒˆ ์ด๋™
1416
2. ๊ฒฐ๊ตญ (m+n-2)๋ฒˆ์˜ ์ด๋™ ์ค‘ (n-1)๋ฒˆ์˜ ์˜ค๋ฅธ์ชฝ ์ด๋™์„ ์„ ํƒํ•˜๋Š” ์กฐํ•ฉ์˜ ์ˆ˜
1517
3. Combination ๊ณต์‹ ์ ์šฉ: (m+n-2)C(n-1)
16-
17-
Further Consideration:
18-
- DP๋กœ ํ’€์–ด๋ณด๊ธฐ
18+
- C(m+n-2, n-1) = (m+n-2)! / ((n-1)! ร— (m-1)!)
19+
- ํ’€์ด๊ฐ€ ๊ฐ„๊ฒฐํ•จ, ํ•˜์ง€๋งŒ ํฐ ์ˆ˜์—์„œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
1920
"""
2021
class Solution:
2122
def uniquePaths(self, m: int, n: int) -> int:
2223
from math import comb
2324
return comb(m+n-2, n-1)
25+
26+
"""
27+
<Solution 2: DP ํ™œ์šฉ>
28+
29+
Time Complexity: O(m * n)
30+
- m์€ row, n์€ column์˜ ๊ธธ์ด
31+
- ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ™œ์šฉ, ๋ชจ๋“  ์ขŒํ‘œ์—์„œ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ
32+
33+
Space Complexity: O(m * n)
34+
- ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ๊ฒฉ์ž์˜ ๋„“์ด์— ๋น„๋ก€ํ•˜๋Š” ๊ณต๊ฐ„์ด ํ•„์š”
35+
36+
ํ’€์ด๋ฐฉ๋ฒ•:
37+
- ๊ตฌํ˜„์ด ๋ณต์žกํ•จ, ํ•˜์ง€๋งŒ ํฐ ์ˆ˜์—์„œ๋„ ์•ˆ์ •์ ์ž„
38+
- ์žฌ๊ท€์™€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ™œ์šฉํ•œ Top-down DP ์ ‘๊ทผ๋ฒ•
39+
- ํ˜„์žฌ ์œ„์น˜์—์„œ ๋ชฉ์ ์ง€๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜ = ์•„๋ž˜๋กœ ์ด๋™ + ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
40+
41+
2x3 ๊ทธ๋ฆฌ๋“œ ์˜ˆ์‹œ:
42+
๊ฐ ์œ„์น˜์—์„œ ๋ชฉ์ ์ง€๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ ์ˆ˜:
43+
(0,0)=3 (0,1)=2 (0,2)=1
44+
(1,0)=1 (1,1)=1 (1,2)=1
45+
46+
์œ„์น˜ (0,0)์—์„œ ์‹œ์ž‘:
47+
dfs(0,0) = dfs(1,0) + dfs(0,1) = 1 + 2 = 3
48+
49+
๊ฒฝ๋กœ 3๊ฐœ:
50+
1. ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜
51+
2. ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ
52+
3. ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ
53+
"""
54+
from functools import cache
55+
class Solution:
56+
def uniquePaths(self, m: int, n: int) -> int:
57+
@cache
58+
def dfs(row, col):
59+
if row == m - 1 and col == n - 1:
60+
return 1
61+
62+
total = 0
63+
64+
if row + 1 < m:
65+
total += dfs(row + 1, col)
66+
67+
if col + 1 < n:
68+
total += dfs(row, col + 1)
69+
70+
return total
71+
72+
return dfs(0, 0)

0 commit comments

Comments
ย (0)