diff --git a/3sum/changhyumm.py b/3sum/changhyumm.py new file mode 100644 index 0000000000..ee5c007bfb --- /dev/null +++ b/3sum/changhyumm.py @@ -0,0 +1,35 @@ +class Solution: + def threeSum(self, nums: List[int]) -> List[List[int]]: + # ans = set() + # for i in range(len(n)): + # seen = {} + # for j in range(i+1, len(n)): + # complement = -(nums[i] + nums[j]) + # if complement in seen: + # ans.add(tuple(sorted([nums[i], nums[j], complement]))) + # seen[nums[j]] = j + # return [list(triplet) for triplet in ans] + # hash + 이중 loop -> O(n^2) + + + ## 투포인터 활용 + # sort + loop -> O(nlogn) + ans_set = set() + nums.sort() + for i in range(len(nums)): + l = i + 1 + r = len(nums) - 1 + while l < r: + total = nums[i] + nums[l] + nums[r] + if total < 0: + l += 1 + elif total > 0: + r -= 1 + else: + # 중복제거 + ans_set.add((nums[i], nums[l], nums[r])) + l += 1 + r -= 1 + return list(ans_set) + + \ No newline at end of file diff --git a/climbing-stairs/changhyumm.py b/climbing-stairs/changhyumm.py new file mode 100644 index 0000000000..e82d5e1b51 --- /dev/null +++ b/climbing-stairs/changhyumm.py @@ -0,0 +1,12 @@ +class Solution: + def climbStairs(self, n: int) -> int: + if n <= 1: + return 1 + dp = [0] * n + print(dp) + dp[0] = 1 + dp[1] = 2 + + for i in range(2, n): + dp[i] = dp[i-2] + dp[i-1] + return dp[-1] diff --git a/product-of-array-except-self/changhyumm.py b/product-of-array-except-self/changhyumm.py new file mode 100644 index 0000000000..6c3105904a --- /dev/null +++ b/product-of-array-except-self/changhyumm.py @@ -0,0 +1,22 @@ +class Solution: + def productExceptSelf(self, nums: List[int]) -> List[int]: + # ans = [1] * len(nums) + # for i in range(len(nums)): + # for j in range(len(nums)): + # if i != j: + # ans[i] = ans[i] * nums[j] + # return ans + # 시간복잡도를 줄이기 위해서 이중루프를 안쓰는 방법으로 + left = [1] * len(nums) + right = [1] * len(nums) + for i in range(len(nums) - 1): + left[i+1] = left[i] * nums[i] + print(left) + for j in range(len(nums) - 1, 0, -1): + right[j-1] = right[j] * nums[j] + print(right) + + answer = [] + for k in range(len(left)): + answer.append(left[k]*right[k]) + return answer \ No newline at end of file diff --git a/valid-anagram/changhyumm.py b/valid-anagram/changhyumm.py new file mode 100644 index 0000000000..569f906d83 --- /dev/null +++ b/valid-anagram/changhyumm.py @@ -0,0 +1,26 @@ +class Solution: + def isAnagram(self, s: str, t: str) -> bool: + if len(s) != len(t): + return False + # sorted_s = sorted(s) + # sorted_t = sorted(t) + # for i in range(len(s)): + # if sorted_s[i] != sorted_t[i]: + # return False + # return True + # 시간복잡도가 O(nlog(n)) + + # Hashmap 사용하는 방법으로 변경 + counter = {} + for char in s: + counter[char] = counter.get(char, 0) + 1 + for char in t: + if char in counter and counter[char] != 0: + counter[char] -= 1 + elif char in counter and counter[char] == 0: + return False + else: + return False + # 시간복잡도 O(n) + # 공간복잡도 O(n) + return True