Skip to content

Commit 0ede5f2

Browse files
authored
Merge pull request #2037 from Seoya0512/main
[Seoya0512] WEEK 02 Solutions
2 parents 95be856 + 7bf58d1 commit 0ede5f2

File tree

4 files changed

+173
-0
lines changed

4 files changed

+173
-0
lines changed

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

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from typing import List
2+
3+
'''
4+
1์ฐจ ์‹œ๋„: ์‹คํŒจ (์‹œ๊ฐ„ ์ดˆ๊ณผ)
5+
- nums์—์„œ ๋‘ ์ˆ˜ (A,B)๋ฅผ ๊ณ ๋ฅธ ํ›„, ์„ธ๋ฒˆ์งธ ์ˆซ์ž์ธ -(A+B)๊ฐ€ A,B๋ฅผ ์ œ์™ธํ•œ nums์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
6+
- ์ค‘๋ณต๋œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด set๊ณผ sorted(tuple)์„ ํ™œ์šฉ
7+
8+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(N^3)
9+
- Outer loop์™€ Inner loop ๊ฐ๊ฐ O(N) ์ด๋ฏ€๋กœ O(N^2)์€ ๊ธฐ๋ณธ
10+
- nums[j:]์—์„œ third_num์„ ์ฐพ๋Š” ๋ฐ O(N) ์‹œ๊ฐ„์ด ๊ฑธ๋ ค์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^3)
11+
12+
๊ณต๊ฐ„ ๋ณต์žก๋„: ์ตœ๋Œ€ O(N^2)
13+
- answer_set์€ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” triplet์„ ์ €์žฅํ•˜๋ฉฐ, 3SUM ํŠน์„ฑ์ƒ ์œ ๋‹ˆํฌํ•œ triplet์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” O(N^2)
14+
15+
'''
16+
17+
class Solution:
18+
def threeSum(self, nums: List[int]) -> List[List[int]]:
19+
answer_set = set()
20+
21+
for i in range(len(nums) - 1):
22+
for j in range(i + 1, len(nums)):
23+
third_num = -1 * (nums[i] + nums[j])
24+
25+
if third_num in nums[j:]:
26+
answer_set.add(tuple(sorted([nums[i], nums[j], third_num])))
27+
28+
return [list(t) for t in answer_set]
29+
30+
'''
31+
๊ฐœ์„  : if third_num in nums[j:] ๋ถ€๋ถ„์„ set์„ ํ™œ์šฉ
32+
Approach
33+
- nums์—์„œ ๋‘ ์ˆ˜ (A,B)๋ฅผ ๊ณ ๋ฅธ ํ›„, ์„ธ๋ฒˆ์งธ ์ˆซ์ž์ธ -(A+B)๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ์กด ๊ธฐ์กฐ๋Š” ์œ ์ง€ํ•จ
34+
- (A,B) ์Œ ์ค‘ โ€˜A(์ฒซ ๋ฒˆ์งธ ์ˆซ์ž)โ€™๊ฐ€ ๋™์ผํ•œ ๊ฐ’์ผ ๋•Œ,
35+
์ด๋ฏธ ๋™์ผํ•œ first ๊ฐ’์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  triplet์„ ์ฒ˜๋ฆฌํ–ˆ์œผ๋ฏ€๋กœ
36+
๋‹ค์‹œ ๊ฐ™์€ first๋กœ ์‹œ์ž‘ํ•˜๋Š” ์กฐํ•ฉ์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ํ™œ์šฉ
37+
- seen set์„ ํ™œ์šฉํ•ด์„œ (A,B)๊ฐ€ ๊ณ ์ •๋œ ์ดํ›„ ์„ธ๋ฒˆ์งธ ์ˆซ์ž์ธ -(A+B)๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ O(1) ์‹œ๊ฐ„์— ํ™•์ธ
38+
39+
- (์˜ˆ์‹œ) seen set์€ i๊ฐ€ ๊ณ ์ •๋œ ์ดํ›„ j๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ nums[j] ๊ฐ’์„ ์ €์žฅ
40+
- nums = [a, b, c, d, e]
41+
- i = 0 (nums[i] = a)์ผ ๋•Œ, seen = {}
42+
- j = 1 (nums[j] = b)์ผ ๋•Œ, seen = {b}
43+
- j = 2 (nums[j] = c)์ผ ๋•Œ, seen = {b, c}
44+
- j = 3 (nums[j] = d)์ผ ๋•Œ, seen = {b, c, d}
45+
- j = 4 (nums[j] = e)์ผ ๋•Œ, seen = {b, c, d, e)
46+
47+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(N^2)
48+
- Outer loop์™€ Inner loop ๊ฐ๊ฐ O(N) ์ด๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^2)
49+
50+
๊ณต๊ฐ„ ๋ณต์žก๋„: ์ตœ๋Œ€ O(N^2)
51+
- seen set์€ nums[j]๋ฅผ ์ €์žฅํ•˜๋ฉฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N)
52+
- used_first๋„ distinct first ๊ฐ’๋“ค์„ ์ €์žฅํ•˜๋ฉฐ ์ตœ๋Œ€ O(N)
53+
- answer_set์€ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” triplet์„ ์ €์žฅํ•˜๋ฉฐ, 3SUM ํŠน์„ฑ์ƒ ์œ ๋‹ˆํฌํ•œ triplet์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” O(N^2)
54+
'''
55+
class Solution:
56+
def threeSum(self, nums: List[int]) -> List[List[int]]:
57+
answer_set = set()
58+
n = len(nums)
59+
60+
used_first = set() # ์ด๋ฏธ i๋กœ ์‚ฌ์šฉํ•œ ๊ฐ’๋“ค
61+
62+
for i in range(n - 1):
63+
# ๊ฐ™์€ ๊ฐ’์„ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋กœ ํ•œ ๋ฒˆ๋งŒ ์“ฐ๊ธฐ
64+
if nums[i] in used_first:
65+
continue
66+
used_first.add(nums[i])
67+
68+
seen = set()
69+
for j in range(i + 1, n):
70+
third_num = -1 * (nums[i] + nums[j])
71+
72+
if third_num in seen:
73+
triplet = tuple(sorted([nums[i], nums[j], third_num]))
74+
answer_set.add(triplet)
75+
else:
76+
seen.add(nums[j])
77+
78+
return [list(t) for t in answer_set]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'''
2+
Approach: Dynamic Programming
3+
- ํ˜ผ์ž์„œ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๊ณ ๋ฏผ์„ 30๋ถ„ ์ด์ƒ ํ–ˆ์œผ๋‚˜ ์‹คํŒจํ•ด์„œ ์•Œ๊ณ ๋‹ฌ๋ ˆ ์„ ์ƒ๋‹˜์˜ ๋ธ”๋กœ๊ทธ ๋„์›€์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
4+
- ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ๋™์  ๊ณ„ํš,Dynamic Programming
5+
- ๋” ์ ์€ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋‹ต์„ ๋จผ์ € ๊ตฌํ•ด์„œ ์ €์žฅํ•ด๋†“๊ณ , ๋” ํฐ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋‹ต์„ ๊ตฌํ•  ๋•Œ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!
6+
7+
Time Complexity: O(n)
8+
- for loop์ด n๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๊ฐ’์— ๋Œ€ํ•œ ์—ฐ์‚ฐ O(n) ๋ฐœ์ƒ
9+
Space Complexity: O(n)
10+
- nums ๋”•์…”๋„ˆ๋ฆฌ์— ๊ฐ ๊ณ„๋‹จ ์ˆ˜์— ๋Œ€ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅ
11+
'''
12+
class Solution:
13+
def climbStairs(self, n: int) -> int:
14+
nums = {1:1, 2:2}
15+
for i in range(3, n+1):
16+
nums[i] = nums[i-1] + nums[i-2]
17+
return nums[n]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
'''
2+
Approach
3+
- ๋ฐฐ์—ด์— 0์ด 2๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ชจ๋“  ์›์†Œ๋Š” 0์ด ๋˜๋ฏ€๋กœ ๋ฐ”๋กœ ๋‹ต์„ ๋ฐ˜ํ™˜
4+
- "self(์ „์ฒด ๊ณฑ์—์„œ ์ œ์™ธ๋  ๊ฐ’)"์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ(before)๊ณผ ์˜ค๋ฅธ์ชฝ(after)๊ณฑ์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด์„œ ๋ฐฐ์—ด์— ์ €์žฅ
5+
- ์ตœ์ข…์ ์œผ๋กœ before์™€ after ๋ฐฐ์—ด์˜ ๊ฐ™์€ ์ธ๋ฑ์Šค ๊ฐ’์„ ๊ณฑํ•ด์„œ ๋ฐ˜ํ™˜
6+
7+
Time Complexity: O(N)
8+
- after, before ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ๊ณ„์‚ฐ
9+
- ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ• ๋•Œ ๋‘ ๋ฐฐ์—ด์„ ๊ณฑ์„ ๊ณ„์‚ฐ
10+
Space Complexity: O(N)
11+
- N์€ num์˜ ๊ธธ์ด์ด๋ฉฐ Nํฌ๊ธฐ์— ๋น„๋ก€ํ•˜๋Š” before, after ๋ฐฐ์—ด ์ƒ์„ฑ ๊ณต๊ฐ„
12+
'''
13+
from typing import List
14+
15+
class Solution:
16+
def productExceptSelf(self, nums: List[int]) -> List[int]:
17+
if nums.count(0) > 1:
18+
return [0] * len(nums)
19+
20+
before = [1] * len(nums)
21+
for idx in range(len(nums)-1):
22+
before[idx+1] = before[idx] * nums[idx]
23+
24+
after = [1] * len(nums)
25+
for jdx in range(len(nums)-1, 0, -1):
26+
after[jdx-1] = after[jdx] * nums[jdx]
27+
28+
return [x * y for x, y in zip(before, after)]

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
'''
2+
Approach 1: Sorting
3+
- ์ œ์ผ ๋จผ์ € ์ƒ๊ฐ๋‚˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ sorted ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ถ„๋ฅ˜ํ•ด์„œ s ์™€ t๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
4+
- ์ •๋ ฌ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด n log n์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜๊ณ ๋„ ํ’€์–ด๋ดค์Šต๋‹ˆ๋‹ค.
5+
6+
Time Complexity: O(n log n)
7+
- ๋ถ„๋ฅ˜ ์ •๋ ฌ์—์„œ O(n log n) ๋ฐœ์ƒ
8+
9+
Space Complexity: O(n)
10+
- ๋ถ„๋ฅ˜ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๋Š” ๊ณต๊ฐ„ ๋•Œ๋ฌธ์— O(n) ๋ฐœ์ƒ
11+
'''
12+
class Solution:
13+
def isAnagram(self, s: str, t: str) -> bool:
14+
sorted_s = ''.join(sorted(s))
15+
sorted_t = ''.join(sorted(t))
16+
if(sorted_s == sorted_t):
17+
return True
18+
else:
19+
return False
20+
21+
'''
22+
Approach 2: ๋นˆ๋„์ˆ˜ ์นด์šดํŒ…
23+
- ๋‘ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋จผ์ € ๋น„๊ตํ•ด์„œ ๋‹ค๋ฅด๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ 1์ฐจ ํ•„ํ„ฐ๋ง
24+
- count ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์„œ s ๋ฌธ์ž์—ด์˜ ๋นˆ๋„์ˆ˜๋ฅผ ์นด์šดํŒ…
25+
- t ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋”•์…”๋„ˆ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์นด์šดํŒ…์„ ๊ฐ์†Œ์‹œํ‚ค๊ณ , ๊ฐ’์ด ์—†์œผ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜
26+
27+
28+
Time Complexity: O(n)
29+
- ๋‘ ๋ฌธ์ž์—ด์„ ๊ฐ๊ฐ ์ˆœํšŒํ•˜๋ฉด ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ, ๋นˆ๋„์ˆ˜ ์นด์šดํŒ… ๋ฐ ๊ฐ์†Œ ์—์„œ O(n) ๋ฐœ์ƒ
30+
31+
Space Complexity: O(n)
32+
- count ๋”•์…”๋„ˆ๋ฆฌ ์ €์žฅ ๊ณต๊ฐ„ ๋•Œ๋ฌธ์— O(n) ๋ฐœ์ƒ
33+
'''
34+
class Solution:
35+
def isAnagram(self, s: str, t: str) -> bool:
36+
# ๊ธธ์ด๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด False
37+
if len(s) != len(t):
38+
return False
39+
# ๋ฌธ์ž ๊ฐœ์ˆ˜ ์นด์šดํŠธ
40+
count = {}
41+
for val in s:
42+
count[val] = count.get(val, 0) + 1
43+
for val in t:
44+
if val not in count:
45+
return False
46+
count[val] -= 1
47+
# ์˜ˆ์‹œ : s = "aacc", t = "ccac" ์ธ ๊ฒฝ์šฐ count[val] ์ด ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ
48+
if count[val] < 0:
49+
return False
50+
return True

0 commit comments

Comments
ย (0)