Skip to content

Commit 9e2eb08

Browse files
authored
Merge pull request #1225 from krokerdile/main
[krokerdile] WEEK 02 solutions
2 parents 1ae2e7e + 7d8dc07 commit 9e2eb08

File tree

5 files changed

+114
-0
lines changed

5 files changed

+114
-0
lines changed

โ€Ž3sum/krokerdile.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
class Solution:
2+
def threeSum(self, nums: List[int]) -> List[List[int]]:
3+
nums.sort()
4+
res = []
5+
n = len(nums)
6+
7+
for i in range(n):
8+
if i > 0 and nums[i] == nums[i-1]:
9+
continue
10+
11+
target = -nums[i]
12+
seen = set()
13+
j = i + 1
14+
15+
while j < n:
16+
complement = target - nums[j]
17+
if complement in seen:
18+
res.append([nums[i], complement, nums[j]])
19+
while j + 1 < n and nums[j] == nums[j+1]:
20+
j += 1
21+
seen.add(nums[j])
22+
j += 1
23+
return list(set(tuple(x) for x in res))
24+
25+
26+
class Solution:
27+
def threeSum(self, nums: List[int]) -> List[List[int]]:
28+
nums.sort()
29+
result = []
30+
31+
for i in range(len(nums)):
32+
# ์ค‘๋ณต๋œ ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋Š” skip
33+
if i > 0 and nums[i] == nums[i - 1]:
34+
continue
35+
36+
left, right = i + 1, len(nums) - 1
37+
38+
while left < right:
39+
total = nums[i] + nums[left] + nums[right]
40+
41+
if total == 0:
42+
result.append([nums[i], nums[left], nums[right]])
43+
44+
# ์ค‘๋ณต๋œ ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ์ˆ˜ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
45+
while left < right and nums[left] == nums[left + 1]:
46+
left += 1
47+
while left < right and nums[right] == nums[right - 1]:
48+
right -= 1
49+
50+
left += 1
51+
right -= 1
52+
53+
elif total < 0:
54+
left += 1 # ํ•ฉ์ด ์ž‘์œผ๋ฉด ์™ผ์ชฝ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ
55+
else:
56+
right -= 1 # ํ•ฉ์ด ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์„ ์™ผ์ชฝ์œผ๋กœ
57+
58+
return result

โ€Žclimbing-stairs/krokerdile.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def climbStairs(self, n: int) -> int:
3+
one, two = 1,1
4+
5+
for i in range(n-1):
6+
temp = one;
7+
one = one + two;
8+
two = temp;
9+
10+
return one;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def productExceptSelf(self, nums: List[int]) -> List[int]:
3+
n = len(nums)
4+
answer = [1] * n
5+
6+
# 1. ์™ผ์ชฝ ๊ณฑ ์ €์žฅ
7+
left_product = 1
8+
for i in range(n):
9+
answer[i] = left_product
10+
left_product *= nums[i]
11+
12+
# 2. ์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ๊ณฑํ•ด์ฃผ๊ธฐ
13+
right_product = 1
14+
for i in reversed(range(n)):
15+
answer[i] *= right_product
16+
right_product *= nums[i]
17+
18+
return answer

โ€Žvalid-anagram/krokerdile.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def isAnagram(self, s: str, t: str) -> bool:
3+
a = {}
4+
b = {}
5+
6+
if len(s) != len(t):
7+
return False
8+
9+
for i in range(len(s)):
10+
a[s[i]] = a.get(s[i], 0) + 1
11+
b[t[i]] = b.get(t[i], 0) + 1
12+
13+
return a == b
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
3+
def validate(node, low, high):
4+
if not node:
5+
return True
6+
7+
# ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด False
8+
if not (low < node.val < high):
9+
return False
10+
11+
# ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ์ตœ๋Œ€๊ฐ’์„ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’์œผ๋กœ ์ œํ•œ
12+
# ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ์ตœ์†Œ๊ฐ’์„ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’์œผ๋กœ ์ œํ•œ
13+
return validate(node.left, low, node.val) and validate(node.right, node.val, high)
14+
15+
return validate(root, float('-inf'), float('inf'))

0 commit comments

Comments
ย (0)