Skip to content

Commit 6b59d00

Browse files
authored
Merge pull request #2064 from liza0525/main
[liza0525] WEEK 02 solutions
2 parents 2ab411f + 4e47240 commit 6b59d00

File tree

5 files changed

+124
-0
lines changed

5 files changed

+124
-0
lines changed

โ€Ž3sum/liza0525.pyโ€Ž

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution:
2+
# ํ•ด๋‹น ๋ฌธ์ œ๋Š” two point ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋•Œ '์ •๋ ฌ'์„ ํ•ด์•ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •ํ™•ํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
3+
# ๊ธฐ์ค€ ๊ฐ’์„ ํ•˜๋‚˜ ์ •ํ•œ ํ›„, ๊ทธ ๊ฐ’์˜ ๋‹ค์Œ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์–‘ ๋์— ํฌ์ธํ„ฐ๋ฅผ ๋‘๊ณ  ์„ธ ์ˆ˜์˜ ํ•ฉ์„ ํ™•์ธํ•œ๋‹ค.
4+
# ๋งŒ์•ฝ ์ˆ˜๊ฐ€ 0๋ณด๋‹ค ์ž‘์œผ๋ฉด, ๋” ํฐ ์ˆ˜๋ฅผ ๋”ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž‘์€ ๊ฐ’ ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜ ์˜ฌ๋ฆฌ๊ณ 
5+
# 0๋ณด๋‹ค ํฌ๋ฉด, ๋” ์ž‘์€ ์ˆ˜๋ฅผ ๋”ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํฐ ์ชฝ ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚ฎ์ถ˜๋‹ค.
6+
def threeSum(self, nums: List[int]) -> List[List[int]]:
7+
# nums๋ฅผ ์ •๋ ฌํ•œ ํ›„
8+
nums.sort()
9+
results = set()
10+
11+
for i in range(len(nums) - 2):
12+
if nums[i] > 0:
13+
# ์ •๋ ฌ์„ ํ•œ ํ›„์˜ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜(i๊ฐ€ 0์ผ ๋•Œ์˜ value)๊ฐ€ 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด,
14+
# ๋ฆฌ์ŠคํŠธ ๋‚ด ๋ชจ๋“  ์ˆ˜๊ฐ€ 0๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•ฉ์ด 0์ด ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋งŒ์กฑํ•˜๋Š” ๋‹ต์ด ์—†์œผ๋‹ˆ break
15+
break
16+
17+
if i > 0 and nums[i] == nums[i - 1]:
18+
# ์ด์ „ ์ธ๋ฑ์Šค์˜ ๊ฐ’๊ณผ ๋™์ผํ•œ ๊ฐ’์ด๋ผ๋ฉด ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ ๊ฒƒ์ด๋ฏ€๋กœ
19+
# ์ค‘๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋„˜์–ด๊ฐ„๋‹ค.
20+
continue
21+
22+
# i ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํฌ์ธํ„ฐ ์„ค์ •
23+
left, right = i + 1, len(nums) - 1
24+
25+
while left < right:
26+
result = nums[i] + nums[left] + nums[right]
27+
if result < 0:
28+
# ํ•ฉ์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์˜ฌ๋ฆฐ๋‹ค
29+
left += 1
30+
elif result > 0:
31+
# ํ•ฉ์ด 0๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ๋‚ด๋ฆฐ๋‹ค
32+
right -= 1
33+
else: # result == 0
34+
# ํ•ฉ์ด 0์ด๋ฉด ๋‹ต์ด ๋˜๋ฏ€๋กœ results์— ์ถ”๊ฐ€ํ•˜๊ณ 
35+
# ํฌ์ธํ„ฐ๋“ค์„ ์กฐ์ •ํ•œ๋‹ค.
36+
results.add((nums[i], nums[left], nums[right]))
37+
left, right = left + 1, right - 1
38+
return list(results)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
# n๋ฒˆ์งธ ๊ณ„๋‹จ์— ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ˆ˜๋Š” (n - 1๋ฒˆ์งธ ๊ณ„๋‹จ์— ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ• ์ˆ˜) + (n - 2๋ฒˆ์งธ ๊ณ„๋‹จ์— ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ• ์ˆ˜)์™€ ๊ฐ™๋‹ค.
3+
# ์ด๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ณต์‹์— ๊ธฐ๋ฐ˜ํ•˜๋ฉฐ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ์ƒ n๋ฒˆ์งธ ์˜ค๋Š” ์ˆ˜๊ฐ€ ๊ณง ๋‹ต์ด ๋œ๋‹ค.
4+
def climbStairs(self, n: int) -> int:
5+
memo = [1, 1, 2]
6+
7+
def fibonacci(step):
8+
if step > n:
9+
return
10+
11+
ways = memo[step - 1] + memo[step - 2]
12+
memo.append(ways)
13+
fibonacci(step + 1)
14+
15+
fibonacci(3)
16+
17+
return memo[n]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def productExceptSelf(self, nums: List[int]) -> List[int]:
3+
# ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ธ๋ฑ์Šค์˜ ๊ณฑ์„ ๊ณฑํ•˜๋Š” ๊ฑด, ์ž๊ธฐ ์ž์‹  ๊ธฐ์ค€ ์™ผ์ชฝ ์ธ๋ฑ์Šค๋“ค์˜ ๊ณฑ๊ณผ ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋“ค์˜ ๊ณฑ์„ ์ตœ์ข…์ ์œผ๋กœ ๊ณฑํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.
4+
# answer[i]์€ (i ๊ธฐ์ค€ ์™ผ์ชฝ ์ธ๋ฑ์Šค ๊ฐ’๋“ค์˜ ๋ˆ„์  ๊ณฑ) * (i ๊ธฐ์ค€ ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค ๊ฐ’๋“ค์˜ ๋ˆ„์  ๊ณฑ)
5+
answers = [1 for _ in range(len(nums))]
6+
7+
# ์—ฌ๊ธฐ์„œ before_total_prod๋Š” ์ธ๋ฑ์Šค i ๊ธฐ์ค€ ์™ผ์ชฝ ์ธ๋ฑ์Šค๋“ค์˜ ๋ˆ„์  ๊ณฑ
8+
# ์ฆ‰, before_total_prod = nums[1] * num[2] * ... * num[i - 2] * num[i - 1]
9+
before_total_prod = 1
10+
for i in range(1, len(nums)):
11+
before_total_prod *= nums[i - 1]
12+
answers[i] *= before_total_prod
13+
14+
# ์—ฌ๊ธฐ์„œ after_total_prod๋Š” ์ธ๋ฑ์Šค i ๊ธฐ์ค€ ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋“ค์˜ ๋ˆ„์  ๊ณฑ
15+
# ์ฆ‰, after_total_prod = nums[n - 1] * num[n - 2] * ... * num[i + 2] * num[i + 1]
16+
# (n์€ ๋ฆฌ์ŠคํŠธ nums ์˜ ๊ธธ์ด, ๊ตฌํ˜„์€ n - 1 ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ๊ณ„์‚ฐ)
17+
after_total_prod = 1
18+
for i in range(len(nums) - 2, -1, -1):
19+
after_total_prod *= nums[i + 1]
20+
answers[i] *= after_total_prod
21+
22+
return answers

โ€Žvalid-anagram/liza0525.pyโ€Ž

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from collections import defaultdict
2+
3+
4+
class Solution:
5+
def isAnagram(self, s: str, t: str) -> bool:
6+
# 1. s๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ฐ ์•ŒํŒŒ๋ฒณ๊ณผ ๊ทธ ์•ŒํŒŒ๋ฒณ์ด ์กด์žฌํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์œ„ํ•ด
7+
# defaultdict๋กœ dictionary ๋งŒ๋“ค์–ด์ค€๋‹ค.
8+
alphabet_cnt_dict = defaultdict(int)
9+
10+
# 2. s์˜ ์•ŒํŒŒ๋ฒณ์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ alphabet_cnt_dict์—์„œ count(value)๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€
11+
# ์˜ˆ์‹œ: anagram์˜ ๊ฒฝ์šฐ, {"a": 3, "n": 1, "g": 1, "m": 1, "r": 1}์ด ์ตœ์ข… ๊ฐ’์ด ๋จ
12+
for ss in s:
13+
alphabet_cnt_dict[ss] += 1
14+
15+
# 3. t์˜ ์•ŒํŒŒ๋ฒณ์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ alphabet_cnt_dict์—์„œ count(value)๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ์†Œ
16+
# ์˜ˆ์‹œ: anagram์˜ ์•„๋‚˜๊ทธ๋žจ์ธ ๊ฒฝ์šฐ, {"a": 0, "n": 0, "g": 0, "m": 0, "r": 0}์ด ์ตœ์ข… ๊ฐ’์ด ๋จ
17+
for tt in t:
18+
alphabet_cnt_dict[tt] -= 1
19+
20+
# 4. s์™€ t๊ฐ€ ์„œ๋กœ ์•„๋‚˜๊ทธ๋žจ์ด์—ˆ๋‹ค๋ฉด, ๊ตฌ์„ฑํ–ˆ๋˜ ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์— ๋Œ€ํ•ด count ๊ฐ’์ด 0์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
21+
# ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด(์–‘์ˆ˜ ๋˜๋Š” ์Œ์ˆ˜ ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด) ์•„๋‚˜๊ทธ๋žจ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค.
22+
for cnt in alphabet_cnt_dict.values():
23+
if cnt != 0:
24+
return False
25+
return True
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
# ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ ํ›„, ๊ทธ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ ๋‚ด value๋“ค์ด ์ •๋ ฌ์ด ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
3+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
4+
inorder_result_list = []
5+
6+
def inorder_tree(tree_node):
7+
if tree_node.left:
8+
inorder_tree(tree_node.left)
9+
10+
inorder_result_list.append(tree_node.val)
11+
12+
if tree_node.right:
13+
inorder_tree(tree_node.right)
14+
15+
inorder_tree(root)
16+
17+
for i in range(len(inorder_result_list) - 1):
18+
# i + 1 ์ธ๋ฑ์Šค ๊ฐ’๋ณด๋‹ค i + 1 ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ์ปค์•ผ ํ•œ๋‹ค. ์•„๋‹ˆ๋ฉด False
19+
if inorder_result_list[i] >= inorder_result_list[i + 1]:
20+
return False
21+
22+
return True

0 commit comments

Comments
ย (0)