Skip to content

Commit 9b6dae6

Browse files
Merge pull request #1329 from taurus09318976/main
[taurus09318976] WEEK 03 Solutions
2 parents c2bc5b7 + ea4150c commit 9b6dae6

File tree

5 files changed

+304
-0
lines changed

5 files changed

+304
-0
lines changed

โ€Žcombination-sum/taurus09318976.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#์ด ๋ฌธ์ œ๋Š” 1)ํ˜„์žฌ ํ•ฉ์ด target๊ณผ ๊ฐ™์œผ๋ฉด ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€ ํ›„ ๋˜๋Œ์•„๊ฐ, 2) ํ˜„์žฌ ํ•ฉ์ด target์„ ์ดˆ๊ณผํ•˜๋ฉด ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋˜๋Œ์•„๊ฐ,
2+
#3) ๊ฐ candidate์— ๋Œ€ํ•ด recursiveํ•˜๊ฒŒ ์‹œ๋„
3+
4+
class Solution:
5+
def combinationSum(self, candidates: List[int], target: int):
6+
#๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ
7+
result = []
8+
9+
#start: ํ˜„์žฌ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” candidate์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค
10+
#current: ํ˜„์žฌ๊นŒ์ง€ ์„ ํƒํ•œ ์ˆซ์ž๋“ค์˜ ๋ฆฌ์ŠคํŠธ
11+
#current_sum: ํ˜„์žฌ๊นŒ์ง€ ์„ ํƒํ•œ ์ˆซ์ž๋“ค์˜ ํ•ฉ
12+
def backtrack(start, current, current_sum):
13+
#ํ˜„์žฌ ํ•ฉ์ด target๊ณผ ๊ฐ™์œผ๋ฉด ํ˜„์žฌ ์กฐํ•ฉ์„ ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€ ํ›„ ๋˜๋Œ์•„๊ฐ
14+
if current_sum == target:
15+
result.append(current.copy())
16+
return
17+
#ํ˜„์žฌ ํ•ฉ์ด target์„ ์ดˆ๊ณผํ•˜๋ฉด ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋˜๋Œ์•„๊ฐ
18+
if current_sum > target:
19+
return
20+
21+
#start ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต ์กฐํ•ฉ์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ด์ „์— ์„ ํƒํ•œ ์ˆซ์ž๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘
22+
for i in range(start, len(candidates)):
23+
#ํ˜„์žฌ candidate ์„ ํƒ
24+
current.append(candidates[i])
25+
#recursive ํ˜ธ์ถœ : i๋ฅผ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜์—ฌ ๊ฐ™์€ ์ˆซ์ž๋ฅผ ๋ฌดํ•œ๋ฐ˜๋ณตํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
26+
backtrack(i, current, current_sum + candidates[i])
27+
#๋งˆ์ง€๋ง‰์— ์„ ํƒํ•œ ์ˆซ์ž ์ œ๊ฑฐ
28+
current.pop()
29+
30+
#๋ฐฑํŠธ๋ž˜ํ‚น ์‹œ์ž‘
31+
backtrack(0, [], 0)
32+
#๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ ๋ฐ˜ํ™˜
33+
return result
34+
35+
36+
# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
37+
solution = Solution()
38+
39+
# ํ…Œ์ŠคํŠธ 1
40+
test1_candidates = [2,3,6,7]
41+
test1_target = 7
42+
print(f"Expected: [[2,2,3],[7]]")
43+
print(f"Result: {solution.combinationSum(test1_candidates, test1_target)}")
44+
45+
# ํ…Œ์ŠคํŠธ 2
46+
test2_candidates = [2,3,5]
47+
test2_target = 8
48+
print(f"Expected: [[2,2,2,2],[2,3,3],[3,5]]")
49+
print(f"Result: {solution.combinationSum(test2_candidates, test2_target)}")
50+
51+
# ํ…Œ์ŠคํŠธ 3
52+
test3_candidates = [2]
53+
test3_target =
54+
print(f"Expected: []")
55+
print(f"Result: {solution.combinationSum(test3_candidates, test3_target)}")
56+
57+
58+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(2^target)
59+
#๊ฐ ๋‹จ๊ณ„์—์„œ ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•˜์ง€ ์•Š๋Š” ๋‘ ๊ฐ€์ง€ ์„ ํƒ์ง€๊ฐ€ ์žˆ์Œ
60+
#์ตœ์•…์˜ ๊ฒฝ์šฐ, target์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ์‹œ๋„ํ•ด์•ผ ํ•จ.
61+
#์˜ˆ๋ฅผ ๋“ค์–ด candidates = [1], target = 10์ผ ๋•Œ:
62+
#[1,1,1,1,1,1,1,1,1,1]๊นŒ์ง€ ์‹œ๋„ํ•ด์•ผ ํ•จ
63+
#์ด๋Š” 2^10์— ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ฐœ์ƒ
64+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(target)
65+
#๊ฐ ์žฌ๊ท€ ํ˜ธ์ถœ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋จ
66+
#์ตœ๋Œ€ ๊นŠ์ด๋Š” target์„ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋กœ ๋‚˜๋ˆˆ ๊ฐ’์ž„
67+
#์˜ˆ๋ฅผ ๋“ค์–ด target = 7, ๋ฆฌ์ŠคํŠธ ๋‚ด ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž = 2์ผ ๋•Œ
68+
#7/2 = 3.5 โ†’ ์ตœ๋Œ€ 3๋ฒˆ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ
69+
#[2,2,3]์„ ๋งŒ๋“ค ๋•Œ 3๋ฒˆ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ
70+
#๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” target ๊ฐ’์— ๋น„๋ก€ํ•˜์—ฌ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ O(target)์ž„
71+
#์ด๋Š” target์ด ์ปค์งˆ์ˆ˜๋ก ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ

โ€Ždecode-ways/taurus09318976.py

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๋ฌธ์ œ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ๋™์ผํ•œ ํŒจํ„ด์˜ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ์ž„
2+
#์ฐจ์ด์ ์€ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ 0,1๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ๋‚˜๋จธ์ง€ ๋‘ ๋ฌธ์ œ๋Š” 1,1๋กœ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์ 
3+
#๋””์ฝ”๋”ฉ ๋ฌธ์ œ๋Š” 1)0์ด ์•„๋‹ˆ์–ด์•ผ ํ•˜๋ฉฐ, 2)๋‘ ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 10~26 ์‚ฌ์ด์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ์ฃผ์–ด์ง„๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ„
4+
5+
class Solution:
6+
def numDecodings(self, s: str):
7+
#์ดˆ๊ธฐ ์˜ˆ์™ธ๊ฐ’ ์ฒ˜๋ฆฌ. ๋นˆ ๋ฌธ์ž์—ด์ด๊ฑฐ๋‚˜, ์ฒซ ๋ฌธ์ž๊ฐ€ 0์ด๋ฉด ๋””์ฝ”๋”ฉ ๋ถˆ๊ฐ€๋Šฅ
8+
if not s or s[0] == '0':
9+
return 0
10+
11+
#DP ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
12+
##dp[i-2] ์—ญํ• 
13+
prev = 1
14+
##dp[i-1] ์—ญํ• 
15+
curr = 1
16+
17+
#DP ๊ณ„์‚ฐ
18+
##์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰๊นŒ์ง€
19+
for i in range(1, len(s)):
20+
##ํ˜„์žฌ ์œ„์น˜์˜ ๋””์ฝ”๋”ฉ ๋ฐฉ๋ฒ• ์ˆ˜๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅ
21+
temp = 0
22+
23+
##ํ•œ ์ž๋ฆฌ ์ˆซ์ž๋กœ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ
24+
###ํ˜„์žฌ ์ˆซ์ž๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด
25+
if s[i] != '0':
26+
###์ด์ „ ๋ฐฉ๋ฒ• ์ˆ˜๋ฅผ ๋”ํ•จ
27+
temp += curr
28+
29+
##๋‘ ์ž๋ฆฌ ์ˆซ์ž๋กœ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ
30+
###ํ˜„์žฌ์™€ ์ด์ „ ์ˆซ์ž๋ฅผ ํ•ฉ์นœ ๋‘ ์ž๋ฆฌ ์ˆ˜๊ฐ€ 10~26 ์‚ฌ์ด๋ฉด
31+
if 10 <= int(s[i-1:i+1]) <= 26:
32+
###๋‘ ์ž๋ฆฌ ์ „ ๋ฐฉ๋ฒ• ์ˆ˜๋ฅผ ๋”ํ•จ
33+
temp += prev
34+
35+
##๋ณ€์ˆ˜ ์—…๋ฐ์ดํŠธ
36+
###์ด์ „ ๊ฐ’์„ ๋‘ ์ž๋ฆฌ ์ „ ๊ฐ’์œผ๋กœ ์ด๋™
37+
prev = curr
38+
###ํ˜„์žฌ ๊ฐ’์„ ์ƒˆ๋กœ ๊ณ„์‚ฐ๋œ ๊ฐ’์œผ๋กœ ์ด๋™
39+
curr = temp
40+
41+
#์ตœ์ข… ๋””์ฝ”๋”ฉ ๋ฐฉ๋ฒ• ์ˆ˜
42+
return curr
43+
44+
# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
45+
solution = Solution()
46+
47+
# ํ…Œ์ŠคํŠธ 1
48+
test1 = "12"
49+
print(f"Expected: 2")
50+
print(f"Result: {solution.numDecodings(test1)}")
51+
52+
# ํ…Œ์ŠคํŠธ 2
53+
test2 = "226"
54+
print(f"Expected: 3")
55+
print(f"Result: {solution.numDecodings(test2)}")
56+
57+
# ํ…Œ์ŠคํŠธ 3
58+
test3 = "06"
59+
print(f"Expected: 0")
60+
print(f"Result: {solution.numDecodings(test3)}")
61+
62+
63+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
64+
#n = ์ž…๋ ฅ ๋ฌธ์ž์—ด s์˜ ๊ธธ์ด
65+
#for ๋ฃจํ”„๊ฐ€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒํผ ํ•œ ๋ฒˆ ์‹คํ–‰๋จ
66+
#๊ฐ ๋ฐ˜๋ณต์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ:
67+
#s[i] != '0' ๋น„๊ต: O(1)
68+
#int(s[i-1:i+1]) ๋ณ€ํ™˜: O(1)
69+
#10 <= two_digit <= 26 ๋น„๊ต: O(1)
70+
#๋ณ€์ˆ˜ ์—…๋ฐ์ดํŠธ: O(1)
71+
#๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)
72+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
73+
#์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„:
74+
#prev: O(1)
75+
#curr: O(1)
76+
#temp: O(1)
77+
#i: O(1)
78+
#์ž…๋ ฅ ํฌ๊ธฐ n๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ƒ์ˆ˜ ๊ฐœ์ˆ˜์˜ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
79+
#๋”ฐ๋ผ์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)
80+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#์ด ๋ฌธ์ œ๋Š” ์นด๋ฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Kadane's Algorithm) ๋ฌธ์ œ๋กœ
2+
#์›๋ž˜ ๋ฐฐ์—ด์—์„œ ์—ฐ์†๋œ ์š”์†Œ๋“ค๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ์ตœ๋Œ€ ๋ถ€๋ถ„ ๋ฐฐ์—ด ํ•ฉ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž„
3+
4+
class Solution:
5+
def maxSubArray(self, nums: List[int]):
6+
#max_sum: ์ง€๊ธˆ๊นŒ์ง€ ๋ฐœ๊ฒฌํ•œ ๊ฐ€์žฅ ํฐ ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ
7+
#current_sum: ํ˜„์žฌ ๊ณ ๋ ค ์ค‘์ธ ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ
8+
#์œ„์˜ ๋‘˜์„ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋กœ ์ดˆ๊ธฐํ™”
9+
max_sum = current_sum = nums[0]
10+
11+
#๋‘ ๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘
12+
for num in nums[1:]:
13+
#ํ˜„์žฌ ์ˆซ์ž๋ฅผ ํฌํ•จํ•œ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ ๊ณ„์‚ฐ
14+
current_sum = max(num, current_sum + num)
15+
#num: ํ˜„์žฌ ์ˆซ์ž๋งŒ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„ ๋ฐฐ์—ด ์‹œ์ž‘
16+
#current_sum + num: ๊ธฐ์กด ๋ถ€๋ถ„ ๋ฐฐ์—ด์— ํ˜„์žฌ ์ˆซ์ž ์ถ”๊ฐ€
17+
18+
#์ตœ๋Œ€ ํ•ฉ ์—…๋ฐ์ดํŠธ
19+
max_sum = max(max_sum, current_sum)
20+
21+
return max_sum
22+
23+
# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
24+
solution = Solution()
25+
26+
# ํ…Œ์ŠคํŠธ 1
27+
test1 = [-2,1,-3,4,-1,2,1,-5,4]
28+
print(f"Expected: 6")
29+
print(f"Result: {solution.maxSubArray(test1)}")
30+
31+
# ํ…Œ์ŠคํŠธ 2
32+
test2 = [1]
33+
print(f"Expected: 1")
34+
print(f"Result: {solution.maxSubArray(test2)}")
35+
36+
# ํ…Œ์ŠคํŠธ 3
37+
test3 = [5,4,-1,7,8]
38+
print(f"Expected: 23")
39+
print(f"Result: {solution.maxSubArray(test3)}")
40+
41+
42+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
43+
#n = nums์˜ ๊ธธ์ด
44+
#for ๋ฃจํ”„๊ฐ€ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ํ•œ ๋ฒˆ ์‹คํ–‰๋จ
45+
#๊ฐ ๋ฐ˜๋ณต์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ:
46+
#max(num, current_sum + num): O(1)
47+
#max(max_sum, current_sum): O(1)
48+
#๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ž„
49+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
50+
#์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„:
51+
#max_sum: O(1)
52+
#current_sum: O(1)
53+
#num: O(1)
54+
#์ž…๋ ฅ ํฌ๊ธฐ n๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ƒ์ˆ˜ ๊ฐœ์ˆ˜์˜ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
55+
#๋”ฐ๋ผ์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ž„
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#์ด ๋ฌธ์ œ๋Š” 1) ์ฃผ์–ด์ง„ ์ •์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜, 2) ๋ณ€ํ™˜๋œ ์ด์ง„์ˆ˜์—์„œ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์ˆœ์„œ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•จ
2+
3+
class Solution:
4+
def hammingWeight(self, n: int):
5+
count = 0
6+
while n:
7+
#n์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋น„ํŠธ๊ฐ€ 1์ธ์ง€ ํ™•์ธ, 1์ด๋ฉด count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ด
8+
if n & 1 == 1 :
9+
count += 1
10+
#๋‹ค์Œ ๋น„ํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด n์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋น„ํŠธ์”ฉ ์‹œํ”„ํŠธํ•จ
11+
n = n >> 1
12+
return count
13+
14+
15+
16+
# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
17+
solution = Solution()
18+
19+
# ํ…Œ์ŠคํŠธ 1
20+
test1 = 11
21+
print(f"Expected: 3")
22+
print(f"Result: {solution.hammingWeight(test1)}")
23+
24+
# ํ…Œ์ŠคํŠธ 2
25+
test2 = 128
26+
print(f"Expected: 1")
27+
print(f"Result: {solution.hammingWeight(test2)}")
28+
29+
# ํ…Œ์ŠคํŠธ 3
30+
test3 = 2147483645
31+
print(f"Expected: 30")
32+
print(f"Result: {solution.hammingWeight(test3)}")
33+
34+
35+
#cf. n & 0์ผ ๋•Œ ์˜ˆ: n = 1011
36+
# 1011
37+
#& 0000
38+
#-----------
39+
# 0000 -> 0๊ณผ AND ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ์–ด๋–ค ์ˆ˜๋“ ์ง€ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ 0์ด ๋จ
40+
#๋ฐ˜๋ฉด์— n & 1์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 1์˜ ์ด์ง„์ˆ˜ ํ‘œํ˜„์ด 0001์ด๊ธฐ ๋•Œ๋ฌธ์—
41+
#์ด ์—ฐ์‚ฐ์œผ๋กœ n์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋น„ํŠธ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.
42+
43+
#์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„: O(log n)
44+
#while n ๋ฃจํ”„๋Š” 1์˜ ๊ฐœ์ˆ˜์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ, n์˜ ์ด์ง„์ˆ˜ ์ž๋ฆฟ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋จ.
45+
#์˜ˆ: n = 128 (10000000)์ผ ๋•Œ 8๋ฒˆ ๋ฐ˜๋ณต
46+
#์ผ๋ฐ˜์ ์œผ๋กœ n์˜ ์ด์ง„์ˆ˜ ์ž๋ฆฟ์ˆ˜๋Š” logโ‚‚n
47+
#n & 1: O(1), n >> 1: O(1)์˜ ๊ฒฝ์šฐ ์ƒ์ˆ˜ ์‹œ๊ฐ„๋งŒํผ ๊ฑธ๋ฆผ
48+
49+
#๊ณต๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„: O(1)
50+
#count ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋ฉฐ, n์„ ์ˆ˜์ •ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 1) ๋ฌธ์ž์—ด์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜, 2) ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ž ์ œ๊ฑฐ,
2+
#3) ๋ฌธ์ž์—ด์ด palindrome์ธ์ง€ ํ™•์ธ
3+
4+
class Solution:
5+
def isPalindrome(self, s: str):
6+
# ๋นˆ ๋ฆฌ์ŠคํŠธ extracted_string ์ƒ์„ฑ
7+
extracted_string = []
8+
9+
10+
for i in s:
11+
#isalnum() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ ํ•„ํ„ฐ๋งํ•จ
12+
if i.isalnum():
13+
#์กฐ๊ฑด์— ๋งž์œผ๋ฉด, lower() ๋ฉ”์„œ๋“œ๋กœ ๋ฌธ์ž์—ด์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ ๋‚จ๊น€
14+
extracted_string.append(i.lower())
15+
#extracted_string ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ''์ œ๊ฑฐ ํ›„ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๊ฒฐํ•ฉ
16+
extracted_string = ''.join(extracted_string)
17+
18+
# palindrome์ธ์ง€ ํ™•์ธ
19+
return extracted_string == extracted_string[::-1]
20+
21+
# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
22+
solution = Solution()
23+
24+
# ํ…Œ์ŠคํŠธ 1
25+
test1 = "A man, a plan, a canal: Panama"
26+
print(f"Expected: True")
27+
print(f"Result: {solution.isPalindrome(test1)}")
28+
29+
# ํ…Œ์ŠคํŠธ 2
30+
test2 = "race a car"
31+
print(f"Expected: False")
32+
print(f"Result: {solution.isPalindrome(test2)}")
33+
34+
# ํ…Œ์ŠคํŠธ 3
35+
test3 = " "
36+
print(f"Expected: True")
37+
print(f"Result: {solution.isPalindrome(test3)}")
38+
39+
40+
#์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n), ์ž…๋ ฅ ๋ฌธ์ž์—ด s์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒํ•จ(n = ์ž…๋ ฅ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด)
41+
#for c in s ๋ฃจํ”„: O(n). ์ž…๋ ฅ ๋ฌธ์ž์—ด s์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒํ•˜๋ฏ€๋กœ O(n)
42+
#isalnum(), lower(), append()์˜ ๊ฒฝ์šฐ : O(1), ๊ฐ ๋ฌธ์ž์— ๋Œ€ํ•ด ์ƒ์ˆ˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ
43+
#'filtered == filtered[::-1]', '.join(filtered)'์˜ ๊ฒฝ์šฐ : O(m) (m = ํ•„ํ„ฐ๋ง๋œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด)
44+
#m โ‰ค n, ์ตœ์•…์˜ ๊ฒฝ์šฐ m = n
45+
46+
#๊ณต๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„: O(n), ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์•ŒํŒŒ๋ฒณ์ด๋‚˜ ์ˆซ์ž์ธ ์ตœ์•…์˜ ๊ฒฝ์šฐ m = n
47+
#filtered ๋ฆฌ์ŠคํŠธ: O(m)
48+
#filtered[::-1]: O(m)

0 commit comments

Comments
ย (0)