Skip to content

Commit d456f88

Browse files
Merge pull request #1412 from taurus09318976/main
[taurus09318976] WEEK 05 Solutions
2 parents 291bcfd + c001d29 commit d456f88

File tree

5 files changed

+253
-0
lines changed

5 files changed

+253
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
'''
2+
- ์ด ๋ฌธ์ œ๋Š” ์ตœ์ €๊ฐ€์— ํ•œ ์ฃผ์‹์„ ์‚ฌ์„œ, ๊ทธ ์ดํ›„์— ์ตœ๋Œ€๊ฐ€์— ํŒ”์•„์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž„
3+
- ๋งŒ์•ฝ ์ด์ต์„ ๋‚ผ ์ˆ˜ ์—†์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•จ
4+
์กฐ๊ฑด :
5+
1) ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ๊ณ  ํ•œ ๋ฒˆ๋งŒ ํŒ”์•„์•ผ ํ•˜๋ฉฐ, ํŒ”๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์‚ฌ์•ผ ํ•จ
6+
2) ํŒ” ๋•Œ๋Š” ๊ตฌ๋งคํ•œ ๋‚  ์ดํ›„์˜ ๋‚ ์งœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
7+
8+
Example 1. ์˜ ๊ฒฝ์šฐ
9+
๋‚ ์งœ (index)| ๊ฐ€๊ฒฉ (price) | min_price (์ตœ์ €๊ฐ€) | current_profit (ํ˜„์žฌ ์ด์ต) | max_profit (์ตœ๋Œ€ ์ด์ต)
10+
0 7 7(์ดˆ๊ธฐ๊ฐ’) - 0(์ดˆ๊ธฐ๊ฐ’)
11+
1 1 7 -> 1 - 0
12+
2 5 1 5 - 1 = 4 0 -> 4
13+
3 3 1 3 - 1 = 2 4
14+
4 6 1 6 - 1 = 5 4 -> 5
15+
5 4 1 4 - 1 = 3 5
16+
17+
'''
18+
class Solution:
19+
def maxProfit(self, prices: List[int]):
20+
# ์ž…๋ ฅ ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ์œผ๋ฉด ์ฃผ๊ฐ€๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ฑฐ๋ž˜ํ•  ์ˆ˜ ์—†์Œ. ๋”ฐ๋ผ์„œ ์ตœ๋Œ€ ์ด์ต์€ 0
21+
if not prices:
22+
return 0
23+
24+
# ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ€๊ฒฉ์„ ์ตœ์ €๊ฐ€๋กœ ์ดˆ๊ธฐํ™”ํ•จ. ์ดํ›„ ๊ฐ€๊ฒฉ๊ณผ ๋น„๊ตํ•  ๊ธฐ์ค€์ ์ด ๋จ
25+
min_price = prices[0]
26+
# ์ด์ต์ด ์—†์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ ์ด์ต์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•จ
27+
max_profit = 0
28+
29+
for price in prices[1:]: # ๋‘ ๋ฒˆ์งธ ๊ฐ€๊ฒฉ๋ถ€ํ„ฐ ์ˆœํšŒ. ์ฒซ๋ฒˆ์งธ ๊ฐ€๊ฒฉ์€ ์ด๋ฏธ min_price์— ํ• ๋‹นํ–ˆ์œผ๋ฏ€๋กœ ์ œ์™ธํ•จ.
30+
if price < min_price: # ํ˜„์žฌ ๊ฐ€๊ฒฉ์ด ์ตœ์ €๊ฐ€๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ฐฑ์‹ . ๋” ์‹ธ๊ฒŒ ์‚ด ์ˆ˜ ์žˆ๋Š” ๋‚ ์„ ์ฐพ๋Š” ๊ณผ์ •์ž„
31+
min_price = price
32+
else:
33+
profit = price - min_price # ํ˜„์žฌ ๊ฐ€๊ฒฉ์—์„œ ์ตœ์ €๊ฐ€๋ฅผ ๋นผ์„œ, ์ง€๊ธˆ ํŒ”๋ฉด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ต ๊ณ„์‚ฐ
34+
if profit > max_profit: # ๊ณ„์‚ฐํ•œ ์ด์ต์ด ๊ธฐ์กด์˜ ์ตœ๋Œ€ ์ด์ต๋ณด๋‹ค ํฌ๋ฉด max_profit ๊ฐฑ์‹ 
35+
max_profit = profit
36+
37+
return max_profit # ๋ฐ˜๋ณต์ด ๋๋‚˜๋ฉด ์ตœ๋Œ€ ์ด์ต์„ ๋ฐ˜ํ™˜
38+
39+
40+
'''
41+
์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)
42+
๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ ํฌ๊ธฐ n์— ๋น„๋ก€ํ•จ
43+
n์€ prices ๋ฐฐ์—ด์˜ ๊ธธ์ด
44+
45+
๊ณต๊ฐ„ ๋ณต์žก๋„ : O(1)
46+
์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋Š” min_price, max_profit, profit 3๊ฐœ๋ฟ์ž„(์ƒ์ˆ˜ ๊ฐœ์ˆ˜),
47+
์ž…๋ ฅ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€์ง€ ์•Š์Œ
48+
์ž…๋ ฅ ๋ฐฐ์—ด ์™ธ์— ๋ณ„๋„์˜ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ
49+
'''
50+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
'''
2+
๋ชฉํ‘œ : ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉํ•˜๊ณ , ๋‹ค์‹œ ์›๋ž˜ ๋ฆฌ์ŠคํŠธ๋กœ ๋””์ฝ”๋”ฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ๋“ฌ์„ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ์ž„
3+
ํ•ต์‹ฌ : ๋ฌธ์ž์—ด์— ์–ด๋–ค ๋ฌธ์ž๊ฐ€ ๋“ค์–ด ์žˆ๋”๋ผ๋„ ์ •ํ™•ํžˆ ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
4+
ํ•ด๊ฒฐ๋ฒ• : ๊ฐ ๋ฌธ์ž์—ด ์•ž์— ๊ธธ์ด๋ฅผ ๋ถ™์—ฌ์„œ ์ธ์ฝ”๋”ฉ ํ•จ
5+
6+
Example 1. ๋‹จ๊ณ„๋ณ„ ์„ค๋ช…
7+
์ž…๋ ฅ: ["lint","code","love","you"]
8+
9+
์ธ์ฝ”๋”ฉ ๊ณผ์ •:
10+
"lint" โ†’ 4:lint
11+
"code" โ†’ 4:code
12+
"love" โ†’ 4:love
13+
"you" โ†’ 3:you
14+
15+
์ตœ์ข… ์ธ์ฝ”๋”ฉ ๋ฌธ์ž์—ด: 4:lint4:code4:love3:you
16+
17+
๋””์ฝ”๋”ฉ ๊ณผ์ •:
18+
i=0 โ†’ : ์œ„์น˜ 1, ๊ธธ์ด 4 โ†’ ๋ฌธ์ž์—ด lint (i=5)
19+
i=5 โ†’ : ์œ„์น˜ 6, ๊ธธ์ด 4 โ†’ ๋ฌธ์ž์—ด code (i=10)
20+
i=10 โ†’ : ์œ„์น˜ 11, ๊ธธ์ด 4 โ†’ ๋ฌธ์ž์—ด love (i=15)
21+
i=15 โ†’ : ์œ„์น˜ 16, ๊ธธ์ด 3 โ†’ ๋ฌธ์ž์—ด you (i=19)
22+
23+
์ตœ์ข… ๊ฒฐ๊ณผ: ["lint","code","love","you"]
24+
25+
๋™์ž‘ ์›๋ฆฌ ์š”์•ฝ
26+
์ธ์ฝ”๋”ฉ: ๊ฐ ๋ฌธ์ž์—ด ์•ž์— ๊ธธ์ด๋ฅผ ๋ถ™์—ฌ์„œ ํ˜ผ๋™ ์—†์ด ๋””์ฝ”๋”ฉ ๊ฐ€๋Šฅํ•จ
27+
๋””์ฝ”๋”ฉ: ๊ธธ์ด ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ์ •ํ™•ํžˆ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•จ
28+
'''
29+
30+
31+
class Solution:
32+
def encode(self, strs):
33+
encoded = []
34+
for s in strs:
35+
encoded.append(f"{len(s)}:{s}") # ๊ฐ ๋ฌธ์ž์—ด ์•ž์— ๊ธธ์ด + ":"์„ ๋ถ™์ž„
36+
return "".join(encoded) # ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นจ
37+
38+
def decode(self, s):
39+
decoded = []
40+
i = 0
41+
while i < len(s):
42+
colon = s.find(":", i) # s.find(":", i) : ํ˜„์žฌ ์œ„์น˜(i)๋ถ€ํ„ฐ ์ฒ˜์Œ ๋‚˜์˜ค๋Š” :์˜ ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ
43+
length = int(s[i:colon]) # int(s[i:colon]) : ์•ž์˜ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด ๊ธธ์ด๋กœ ๋ณ€ํ™˜
44+
i = colon + 1 # ๋ฌธ์ž์—ด ์‹œ์ž‘ ์œ„์น˜๋กœ ์ด๋™
45+
decoded.append(s[i:i+length]) # s[i:i+length : ๊ธธ์ด๋งŒํผ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์„œ ์ €์žฅํ•จ.
46+
i += length # ๋‹ค์Œ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์œ„์น˜๋กœ ์ด๋™
47+
return decoded

โ€Žgroup-anagrams/taurus09318976.py

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
'''
2+
์ด ๋ฌธ์ œ๋Š” ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด์„ ํ‚ค(key)๋กœ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ์• ๋„ˆ๊ทธ๋žจ๋ผ๋ฆฌ ๊ทธ๋ฃนํ™”ํ•จ
3+
์ฆ‰, ๊ฐ ๋‹จ์–ด๋ฅผ ์ •๋ ฌํ–ˆ์„ ๋•Œ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ฐ™์€ ๊ทธ๋ฃน์ž„
4+
5+
["eat","tea","tan","ate","nat","bat"]
6+
๋‹จ์–ด | ์ •๋ ฌ ๊ฒฐ๊ณผ | ํ‚ค | groups ๋”•์…”๋„ˆ๋ฆฌ ๋ณ€ํ™”
7+
eat aet aet {'aet': ['eat']}
8+
tea aet aet {'aet': ['eat', 'tea']}
9+
tan ant ant {'aet': [...], 'ant': ['tan']}
10+
ate aet aet {'aet': ['eat','tea','ate'], ...}
11+
nat ant ant {'ant': ['tan','nat'], ...}
12+
bat abt abt {'abt': ['bat'], ...}
13+
14+
'''
15+
class Solution:
16+
def groupAnagrams(self, strs: List[str]):
17+
groups = defaultdict(list) # defaultdict : ํ‚ค๊ฐ€ ์—†์–ด๋„ ์ž๋™์œผ๋กœ ๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
18+
19+
for word in strs: # ๊ฐ ๋‹จ์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธ
20+
sorted_word = ''.join(sorted(word)) # ๋‹จ์–ด๋ฅผ ์ •๋ ฌํ•ด ํ‚ค ์ƒ์„ฑ (์˜ˆ: "tea" โ†’ "aet")
21+
groups[sorted_word].append(word) # ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋‹จ์–ด๋ฅผ ๊ทธ๋ฃน์— ์ถ”๊ฐ€
22+
23+
return list(groups.values()) # ๊ทธ๋ฃน๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜
24+
25+
'''
26+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(n ร— klogk) + O(n) = O(n ร— klogk)
27+
n: ๋‹จ์–ด ๊ฐœ์ˆ˜
28+
k: ๋‹จ์–ด์˜ ์ตœ๋Œ€ ๊ธธ์ด
29+
๊ฐ ๋‹จ์–ด ์ •๋ ฌ์— O(k log k) ์‹œ๊ฐ„ ์†Œ์š” (ex. 5๊ธ€์ž โ†’ 5 log 5 โ‰ˆ 11)
30+
๋‹จ์–ด ์ •๋ ฌ: ๊ฐ ๋‹จ์–ด๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐ O(k log k) ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
31+
ํŒŒ์ด์ฌ์˜ sorted() ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Timsort ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ,
32+
์ด์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํ‰๊ท ์ ์œผ๋กœ O(k log k)์ž„
33+
n๊ฐœ์˜ ๋‹จ์–ด ์ฒ˜๋ฆฌ: ๋ชจ๋“  ๋‹จ์–ด์— ๋Œ€ํ•ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ n ร— O(k log k) = O(n ร— k log k)610.
34+
๋”•์…”๋„ˆ๋ฆฌ ์—ฐ์‚ฐ: ์ •๋ ฌ๋œ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์–ด๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ์ž‘์—…์€ O(1) ์‹œ๊ฐ„์— ์ด๋ฃจ์–ด์ง€๋ฉฐ,
35+
์ „์ฒด์ ์œผ๋กœ O(n) ์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค
36+
37+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(n ร— k) + O(n ร— k) = O(n ร— k)
38+
์ •๋ ฌ๋œ ํ‚ค ์ €์žฅ: ๊ฐ ๋‹จ์–ด๋ฅผ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ €์žฅํ•จ
39+
๋‹จ์–ด ๊ธธ์ด๊ฐ€ k์ผ ๋•Œ, ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด ์ €์žฅ์— O(k) ๊ณต๊ฐ„์ด ํ•„์š”ํ•จ
40+
n๊ฐœ์˜ ๋‹จ์–ด์— ๋Œ€ํ•ด ์ด O(n ร— k) ๊ณต๊ฐ„์ด ์‚ฌ์šฉ๋จ
41+
๋”•์…”๋„ˆ๋ฆฌ ๊ฐ’ ์ €์žฅ: ์›๋ณธ ๋‹จ์–ด๋ฅผ ๊ทธ๋ฃน๋ณ„๋กœ ์ €์žฅํ•จ. ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ
42+
43+
'''
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
'''
2+
์ด ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž„ (์˜ˆ : ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ)
3+
์ฃผ์š” ๊ธฐ๋Šฅ : ๋‹จ์–ด ์ถ”๊ฐ€(insert), ๋‹จ์–ด ๊ฒ€์ƒ‰(search), ์ ‘๋‘์‚ฌ ํ™•์ธ(startsWith)
4+
5+
Example 1.์˜ ๋‹จ๊ณ„๋ณ„ ๋™์ž‘
6+
7+
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ˆœ์„œ ๋ฆฌ์ŠคํŠธ ์ธ์ž ๋ฆฌ์ŠคํŠธ ์‹ค์ œ ํ˜ธ์ถœ ์˜ˆ์‹œ
8+
"Trie" [] Trie() -> ๋นˆ ํŠธ๋ผ์ด๋ฅผ ๋งŒ๋“ฌ. ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์•„๋ฌด ๋ฌธ์ž๋„ ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์Œ
9+
"insert" ["apple"] insert("apple") -> 'a' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
10+
-> 'p' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
11+
-> ๋˜ 'p' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
12+
-> 'l' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
13+
-> 'e' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
14+
-> ๋งˆ์ง€๋ง‰ 'e' ๋…ธ๋“œ์— is_end = True ํ‘œ์‹œ (์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ "apple"์ด๋ผ๋Š” ๋‹จ์–ด์ž„์„ ๋œปํ•จ)
15+
16+
"search" ["apple"] search("apple") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' โ†’ 'l' โ†’ 'e' ๋…ธ๋“œ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ์ด๋™
17+
-> ๋งˆ์ง€๋ง‰ 'e' ๋…ธ๋“œ๊ฐ€ is_end = True ์ด๋ฏ€๋กœ True ๋ฐ˜ํ™˜
18+
19+
"search" ["app"] search("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™
20+
-> 'p' ๋…ธ๋“œ์˜ is_end ๊ฐ’์ด False (์•„์ง "app"์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์•˜์Œ)
21+
-> ๋”ฐ๋ผ์„œ False ๋ฐ˜ํ™˜
22+
"startsWith" ["app"] startsWith("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™
23+
-> ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ True ๋ฐ˜ํ™˜ (์ ‘๋‘์‚ฌ๋Š” ์กด์žฌํ•จ)
24+
25+
"insert" ["app"] insert("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ ์ƒˆ ๋…ธ๋“œ ์ƒ์„ฑ ์•ˆ ํ•จ
26+
-> ๋งˆ์ง€๋ง‰ 'p' ๋…ธ๋“œ์— is_end = True ํ‘œ์‹œ (์ด์ œ "app"๋„ ์™„์„ฑ๋œ ๋‹จ์–ด์ž„)
27+
-> "app"์€ ์ฒ˜์Œ์— is_end=False์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์‹œ False๊ฐ€ ๋‚˜์™”๊ณ , ์‚ฝ์ž… ํ›„ True๊ฐ€ ๋จ
28+
29+
"search" ["app"] search("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™
30+
-> ๋งˆ์ง€๋ง‰ 'p' ๋…ธ๋“œ๊ฐ€ is_end = True ์ด๋ฏ€๋กœ True ๋ฐ˜ํ™˜
31+
32+
<ํŠธ๋ผ์ด ๊ตฌ์กฐ>
33+
34+
๋ฃจํŠธ
35+
โ””โ”€ 'a'
36+
โ””โ”€ 'p'
37+
โ””โ”€ 'p' (is_end=True) โ† "app"
38+
โ””โ”€ 'l'
39+
โ””โ”€ 'e' (is_end=True) โ† "apple"
40+
41+
42+
'''
43+
44+
class TrieNode: # ํŠธ๋ผ์ด์˜ ๊ฐ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
45+
def __init__(self):
46+
self.children = {} # ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ž์‹๋“ค์„ {๋ฌธ์ž:๋…ธ๋“œ} ํ˜•ํƒœ๋กœ ์ €์žฅ
47+
self.is_end = False # ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๋‹จ์–ด์˜ ๋์ธ์ง€ ํ‘œ์‹œ(๊ธฐ๋ณธ๊ฐ’ False)
48+
49+
class Trie:
50+
def __init__(self):
51+
self.root = TrieNode() # ํŠธ๋ผ์ด์˜ ์‹œ์ž‘์ ์ธ ๋นˆ ๋ฃจํŠธ ๋…ธ๋“œ ์ƒ์„ฑ
52+
53+
def insert(self, word: str) -> None:
54+
node = self.root # ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘
55+
for char in word: # ๋‹จ์–ด์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌ
56+
if char not in node.children: # ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ž์‹์— ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด
57+
node.children[char] = TrieNode() # ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ƒ์„ฑ ํ›„ ์ž์‹์— ์ถ”๊ฐ€
58+
node = node.children[char] # ๋‹ค์Œ ๋ฌธ์ž ๋…ธ๋“œ๋กœ ์ด๋™
59+
node.is_end = True # ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ๋…ธ๋“œ์— ๋ ํ‘œ์‹œ
60+
61+
def search(self, word: str) -> bool:
62+
node = self.root
63+
for char in word: # ๋‹จ์–ด์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ๋”ฐ๋ผ ์ด๋™
64+
if char not in node.children: # ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด ๋‹จ์–ด ์กด์žฌ X -> False
65+
return False
66+
node = node.children[char]
67+
return node.is_end # ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ๋‹จ์–ด ๋์ธ์ง€ ํ™•์ธ
68+
69+
70+
def startsWith(self, prefix: str) -> bool:
71+
node = self.root
72+
for char in prefix: # ์ ‘๋‘์‚ฌ์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ๋”ฐ๋ผ ์ด๋™
73+
if char not in node.children: # ๋ฌธ์ž ์—†์œผ๋ฉด ์ ‘๋‘์‚ฌ ์กด์žฌ X -> False
74+
return False # ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์กด์žฌ -> ์ ‘๋‘์‚ฌ O
75+
node = node.children[char]
76+
return True # 7. ์ ‘๋‘์‚ฌ ์กด์žฌ
77+
78+

โ€Žword-break/taurus09318976.py

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'''
2+
์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด s๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‹จ์–ด ์‹œํ€€์Šค๋กœ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ž„
3+
์ด๋•Œ ๋ชจ๋“  ๋‹จ์–ด๋Š” ์ฃผ์–ด์ง„ ์‚ฌ์ „(wordDict)์— ํฌํ•จ๋˜์–ด์•ผ ํ•จ
4+
5+
Example 1.์˜ ์˜ˆ๋ฅผ ๋“ค๋ฉด
6+
dp = [True, False, False, False, False, False, False, False, False]
7+
์ธ๋ฑ์Šค: 0 1 2 3 4 5 6 7 8
8+
์˜๋ฏธ: "" "l" "le" "lee" "leet" "leetc" "leetco" "leetcod" "leetcode"
9+
๊ฐ€๋Šฅํ•œ ๋‹จ์–ด ๊ธธ์ด: l=1~4 l=1~4 l=1~4 l=4 l=1~4 l=1~4 l=1~4 l=4
10+
11+
dp[i]๊ฐ€ True๊ฐ€ ๋˜๋Š” ์กฐ๊ฑด:
12+
dp[i-l]์ด True์ด๊ณ , s[i-l:i]๊ฐ€ ์‚ฌ์ „์— ์žˆ๋Š” ๋‹จ์–ด์ผ ๋•Œ
13+
์˜ˆ์‹œ์—์„œ i=4์™€ i=8์—์„œ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์–ด True๋กœ ๋ณ€๊ฒฝ๋จ
14+
15+
'''
16+
17+
class Solution:
18+
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
19+
word_set = set(wordDict) # ๋‹จ์–ด ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ง‘ํ•ฉ์œผ๋กœ ๋ณ€ํ™˜
20+
if not word_set: # ์‚ฌ์ „์ด ๋น„์–ด์žˆ์œผ๋ฉด ํ•ญ์ƒ False
21+
return False
22+
23+
max_len = max(len(word) for word in word_set) # ์‚ฌ์ „์—์„œ ๊ฐ€์žฅ ๊ธด ๋‹จ์–ด์˜ ๊ธธ์ด ๊ตฌ๋ถ„
24+
dp = [False] * (len(s) + 1) # dp[i]๋Š” ๋ฌธ์ž์—ด s์˜ ์ฒซ i๊ธ€์ž๊ฐ€ ๋ถ„ํ•  ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ์ €์žฅ
25+
dp[0] = True # ๋นˆ ๋ฌธ์ž์—ด์€ ํ•ญ์ƒ ๋ถ„ํ•  ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ True
26+
27+
for i in range(1, len(s) + 1): # ๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ์œ„์น˜๋ฅผ ์ˆœํšŒํ•จ
28+
for l in range(1, max_len + 1): # ๋‹จ์–ด ๊ธธ์ด๋ฅผ 1๋ถ€ํ„ฐ max_len๊นŒ์ง€ ํ™•์ธํ•จ
29+
if i < l: # ํ˜„์žฌ ์œ„์น˜๋ณด๋‹ค ๋‹จ์–ด ๊ธธ์ด๊ฐ€ ๊ธธ๋ฉด ํŒจ์Šค
30+
break
31+
if dp[i - l] and s[i-l:i] in word_set: # ์ด์ „ ์œ„์น˜๊ฐ€ True์ด๊ณ , ํ˜„์žฌ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ์‚ฌ์ „์— ์žˆ์œผ๋ฉด True๋กœ ํ‘œ์‹œํ•จ
32+
dp[i] = True
33+
break # ํ•˜๋‚˜๋ผ๋„ ์„ฑ๊ณตํ•˜๋ฉด ๋” ํ™•์ธํ•  ํ•„์š” ์—†์Œ
34+
35+
return dp[-1] # ์ตœ์ข… ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

0 commit comments

Comments
ย (0)