Skip to content

Commit 182ac06

Browse files
authored
Merge pull request #1637 from KwonNayeon/main
[KwonNayeon] Week 14 Solutions
2 parents 5726dc5 + cc59421 commit 182ac06

File tree

3 files changed

+133
-12
lines changed

3 files changed

+133
-12
lines changed

โ€Žfind-median-from-data-stream/KwonNayeon.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
- There will be at least one element in the data structure before calling findMedian.
55
- At most 5 * 10^4 calls will be made to addNum and findMedian.
66
7+
<Solution 1: ๋ฆฌ์ŠคํŠธ ํ™œ์šฉ>
8+
79
Time Complexity:
810
- addNum(): O(nlogn)
911
- ๋งค๋ฒˆ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ
@@ -41,3 +43,54 @@ def findMedian(self) -> float:
4143
mid2 = self.nums[n // 2]
4244
return (mid1 + mid2) / 2.0
4345

46+
"""
47+
<Solution 2: ํž™ ํ™œ์šฉ>
48+
49+
Time Complexity:
50+
- addNum(): O(log n) - ํž™์— ์‚ฝ์ž…/์‚ญ์ œ ์—ฐ์‚ฐ
51+
- findMedian(): O(1) - ํž™์˜ ๋ฃจํŠธ ์š”์†Œ๋งŒ ์ ‘๊ทผ
52+
53+
Space Complexity:
54+
- O(n) - ๋ชจ๋“  ์ž…๋ ฅ ์ˆซ์ž๋ฅผ ๋‘ ๊ฐœ์˜ ํž™์— ์ €์žฅ
55+
56+
ํ’€์ด๋ฐฉ๋ฒ•:
57+
max/min heap์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ˆ๋ฐ˜์”ฉ ๋‚˜๋ˆ„์–ด median ๊ฐ’์„ ์ฐพ์Œ
58+
1. ์ž๋ฃŒ๊ตฌ์กฐ
59+
- lower (max heap)
60+
- upper (min heap)
61+
2. addNum
62+
- upper๊ฐ€ ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ์ˆซ์ž๊ฐ€ upper[0]๋ณด๋‹ค ํฌ๋ฉด upper์— ์ถ”๊ฐ€
63+
- ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด lower์— ์ถ”๊ฐ€
64+
3. ๊ท ํ˜• ์œ ์ง€
65+
- ๋‘ ํž™์˜ ํฌ๊ธฐ ์ฐจ์ด๊ฐ€ ์ตœ๋Œ€ 1์ด ๋˜๋„๋ก ์กฐ์ •ํ•จ
66+
- lower๊ฐ€ ๋” ๋งŽ์œผ๋ฉด upper๋กœ ์ด๋™
67+
- upper๊ฐ€ 2๊ฐœ ์ด์ƒ ๋” ๋งŽ์œผ๋ฉด lower๋กœ ์ด๋™
68+
4. ์ค‘๊ฐ„๊ฐ’ ๊ณ„์‚ฐ
69+
- ํ™€์ˆ˜๊ฐœ: upper[0] (upper๊ฐ€ ํ•ญ์ƒ 1๊ฐœ ๋” ๋งŽ๊ฑฐ๋‚˜ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ)
70+
- ์ง์ˆ˜๊ฐœ: (-lower[0] + upper[0]) / 2
71+
"""
72+
from heapq import heappop, heappush
73+
74+
class MedianFinder:
75+
76+
def __init__(self):
77+
self.lower = []
78+
self.upper = []
79+
80+
def addNum(self, num: int) -> None:
81+
if not self.upper or self.upper[0] < num:
82+
heappush(self.upper, num)
83+
else:
84+
heappush(self.lower, -num)
85+
86+
if len(self.lower) > len(self.upper):
87+
heappush(self.upper, -heappop(self.lower))
88+
elif len(self.lower) + 1 < len(self.upper):
89+
heappush(self.lower, -heappop(self.upper))
90+
91+
def findMedian(self) -> float:
92+
if len(self.lower) < len(self.upper):
93+
return self.upper[0]
94+
95+
else:
96+
return (-self.lower[0] + self.upper[0]) / 2

โ€Žword-search-ii/KwonNayeon.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"""
2+
Constraints:
3+
- m == board.length
4+
- n == board[i].length
5+
- 1 <= m, n <= 12
6+
- board[i][j] is a lowercase English letter.
7+
- 1 <= words.length <= 3 * 10^4
8+
- 1 <= words[i].length <= 10
9+
- words[i] consists of lowercase English letters.
10+
- All the strings of words are unique.
11+
12+
Time Complexity: O(W * N * 4^L)
13+
- W๋Š” words์˜ ๊ฐœ์ˆ˜
14+
- N์€ board์˜ ๋ชจ๋“  cell (m * n)
15+
- L์€ word์˜ ๊ธธ์ด
16+
- ๊ฐ ๋‹จ์–ด๋งˆ๋‹ค Word Search 1์„ ๋ฐ˜๋ณต
17+
18+
Space Complexity: O(L)
19+
- L์€ word์˜ ๊ธธ์ด๋กœ, ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด
20+
21+
Word search 1๊ณผ์˜ ์ฐจ์ด์ :
22+
- ๋‹จ์–ด ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋™์‹œ์— ์ฐพ์•„์•ผ ํ•จ
23+
- ์ฐพ์€ ๋ชจ๋“  ๋‹จ์–ด๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ
24+
25+
ํ’€์ด๋ฐฉ๋ฒ•:
26+
- Word search 1๊ณผ ๋™์ผํ•œ ๋ฐฉ๋ฒ• + set(words)๋กœ ์ค‘๋ณต ์ œ๊ฑฐ
27+
28+
๋…ธํŠธ:
29+
- ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ†ต๊ณผ ์•ˆ ๋จ
30+
- Trie ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ
31+
"""
32+
class Solution:
33+
def findWords(self, board: List[List[str]], words: List[str]) -> List[str]:
34+
words = list(set(words))
35+
result = []
36+
37+
def exist(word):
38+
rows, cols = len(board), len(board[0])
39+
40+
def dfs(i, j, k):
41+
if k == len(word):
42+
return True
43+
44+
if (i < 0 or i >= rows or
45+
j < 0 or j >= cols or
46+
board[i][j] != word[k]):
47+
return False
48+
49+
temp = board[i][j]
50+
board[i][j] = '#'
51+
52+
result = (dfs(i+1, j, k+1) or
53+
dfs(i-1, j, k+1) or
54+
dfs(i, j+1, k+1) or
55+
dfs(i, j-1, k+1))
56+
57+
board[i][j] = temp
58+
return result
59+
60+
for i in range(rows):
61+
for j in range(cols):
62+
if board[i][j] == word[0]:
63+
if dfs(i, j, 0):
64+
return True
65+
return False
66+
67+
for word in words:
68+
if exist(word):
69+
result.append(word)
70+
return result

โ€Žword-search/KwonNayeon.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,39 @@
66
4. word length is between 1 and 15 inclusive
77
5. board and word contain only lowercase and uppercase English letters
88
9-
Time Complexity: O(N * 3^L)
9+
Time Complexity: O(N * 4^L)
1010
- N์€ board์˜ ๋ชจ๋“  cell (m * n)
1111
- L์€ word์˜ ๊ธธ์ด
12-
- ๊ฐ cell์—์„œ ์‹œ์ž‘ํ•˜์—ฌ word์˜ ๊ฐ ๊ธ€์ž๋งˆ๋‹ค ์„ธ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ (์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋ฐฉํ–ฅ ์ œ์™ธ)
12+
- ๊ฐ cell์—์„œ ์‹œ์ž‘ํ•˜์—ฌ word์˜ ๊ฐ ๊ธ€์ž๋งˆ๋‹ค ๋„ค๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ (์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋ฐฉํ–ฅ ์ œ์™ธ)
1313
1414
Space Complexity: O(L)
1515
- L์€ word์˜ ๊ธธ์ด๋กœ, ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด
16-
17-
To Do:
18-
- DFS์™€ ๋ฐฑํŠธ๋ž˜ํ‚น ๊ฐœ๋… ๋ณต์Šตํ•˜๊ธฐ
19-
- ๋‹ค๋ฅธ ์Šคํ„ฐ๋””์›๋ถ„๋“ค์˜ ๋‹ต์•ˆ ์ฐธ์กฐํ•˜์—ฌ ๋‹ค๋ฅธ ํ’€์ด๋ฐฉ๋ฒ• ๋ณต์Šตํ•˜๊ธฐ
2016
"""
2117

2218
class Solution:
2319
def exist(self, board: List[List[str]], word: str) -> bool:
2420
rows, cols = len(board), len(board[0])
2521

2622
def dfs(i, j, k):
23+
24+
# ๋‹จ์–ด๋ฅผ ๋ชจ๋‘ ์ฐพ์•˜์œผ๋ฉด True ๋ฐ˜ํ™˜
2725
if k == len(word):
2826
return True
2927

30-
if (i < 0 or i >= rows or
28+
if (i < 0 or i >= rows or # ๊ฒฝ๊ณ„์ฒดํฌ
3129
j < 0 or j >= cols or
32-
board[i][j] != word[k]):
30+
board[i][j] != word[k]): # ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ฐพ๋Š” ๋ฌธ์ž์™€ ๋‹ค๋ฆ„
3331
return False
3432

35-
temp = board[i][j]
36-
board[i][j] = '#'
33+
temp = board[i][j] # ํ˜„์žฌ ๋ฌธ์ž๋ฅผ ์ž„์‹œ์ €์žฅ
34+
board[i][j] = '#' # ๋ฐฉ๋ฌธ ํ‘œ์‹œ
3735

38-
result = (dfs(i+1, j, k+1) or
36+
result = (dfs(i+1, j, k+1) or # ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ ํƒ์ƒ‰
3937
dfs(i-1, j, k+1) or
4038
dfs(i, j+1, k+1) or
4139
dfs(i, j-1, k+1))
4240

43-
board[i][j] = temp
41+
board[i][j] = temp # ๋ฐฑํŠธ๋ž˜ํ‚น (์›๋ž˜ ๋ฌธ์ž๋กœ ๋ณต์›)
4442
return result
4543

4644
for i in range(rows):

0 commit comments

Comments
ย (0)