From e645851e0dd08cff73648c427b7fd4d005a0745b Mon Sep 17 00:00:00 2001 From: changhyumm Date: Wed, 26 Nov 2025 00:34:47 +0900 Subject: [PATCH 1/7] valid-palindrome --- valid-palindrome/changhyumm.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 valid-palindrome/changhyumm.py diff --git a/valid-palindrome/changhyumm.py b/valid-palindrome/changhyumm.py new file mode 100644 index 0000000000..d3e2fb7e2a --- /dev/null +++ b/valid-palindrome/changhyumm.py @@ -0,0 +1,11 @@ +class Solution: + def isPalindrome(self, s: str) -> bool: + # 시간복잡도 O(n) + # loop + s_list = [x.lower() for x in s if x.isalnum()] + # 시간복잡도 O(n) + # loop + list pop() + for i in range(len(s_list)//2): + if s_list[i] != s_list.pop(): + return False + return True From 216fbcb55e022483b04586fbff27187e47800d46 Mon Sep 17 00:00:00 2001 From: changhyumm Date: Wed, 26 Nov 2025 00:51:20 +0900 Subject: [PATCH 2/7] number of 1 bits --- number-of-1-bits/changhyumm.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 number-of-1-bits/changhyumm.py diff --git a/number-of-1-bits/changhyumm.py b/number-of-1-bits/changhyumm.py new file mode 100644 index 0000000000..b3daef6906 --- /dev/null +++ b/number-of-1-bits/changhyumm.py @@ -0,0 +1,11 @@ +class Solution: + def hammingWeight(self, n: int) -> int: + count = 0 + # 시간복잡도 O(log n) 반으로 나누기 때문 + while n > 0: + if n % 2 == 1: + count += 1 + n = n // 2 + else: + n = n / 2 + return count \ No newline at end of file From 8dfc886278ebc72b2adfaea0ff7f82d69914e298 Mon Sep 17 00:00:00 2001 From: changhyumm Date: Sat, 29 Nov 2025 00:52:46 +0900 Subject: [PATCH 3/7] combination-sum --- combination-sum/changhyumm.py | 19 +++++++++++++++++++ number-of-1-bits/changhyumm.py | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 combination-sum/changhyumm.py diff --git a/combination-sum/changhyumm.py b/combination-sum/changhyumm.py new file mode 100644 index 0000000000..e6a9bd286a --- /dev/null +++ b/combination-sum/changhyumm.py @@ -0,0 +1,19 @@ +class Solution: + def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: + ans = [] + def combination(index, cur_comb, cur_sum): + if cur_sum == target: + ans.append(cur_comb[:]) + return + if cur_sum > target or index >= len(candidates): + return + cur_comb.append(candidates[index]) + combination(index, cur_comb, cur_sum + candidates[index]) + # 합이 target이랑 같던지, 크던지, 길이를 넘던지하면 return으로 탈출 + # 그 외에 다른 경우의 수를 봐야하므로 + # 마지막꺼는 다시 빼고 어쨌든 index 넘겨서 다시 combination 확인해봐야함 + cur_comb.pop() + combination(index + 1, cur_comb, cur_sum) + return ans + + return combination(0, [], 0) diff --git a/number-of-1-bits/changhyumm.py b/number-of-1-bits/changhyumm.py index b3daef6906..ccd6e0b387 100644 --- a/number-of-1-bits/changhyumm.py +++ b/number-of-1-bits/changhyumm.py @@ -8,4 +8,4 @@ def hammingWeight(self, n: int) -> int: n = n // 2 else: n = n / 2 - return count \ No newline at end of file + return count From f4b93225e5fd0c41442a4ebb9fd289e3be5271ba Mon Sep 17 00:00:00 2001 From: changhyumm Date: Sun, 30 Nov 2025 01:12:37 +0900 Subject: [PATCH 4/7] decode-ways --- decode-ways/changhyumm.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 decode-ways/changhyumm.py diff --git a/decode-ways/changhyumm.py b/decode-ways/changhyumm.py new file mode 100644 index 0000000000..26e5731ffe --- /dev/null +++ b/decode-ways/changhyumm.py @@ -0,0 +1,25 @@ +class Solution: + def numDecodings(self, s: str) -> int: + if s[0] == '0': + return 0 + + n = len(s) + # dp[i]를 i번쨰까지 처리했을떄의 경우의 수의 합으로 정의 + dp = [0] * n + # dp[0] = 1 (첫자리 수) + dp[0] = 1 + + # i번쨰 숫자가 1~9로 대체될 수 있으면 이전까지의 경우의 수 합을 이어감 + # i번쨰 숫자(두자리수)가 10~26으로 대체될 수 있으면 앞자리는 사용한 것이므로 그 앞자리까지의 상태를 가져옴 + # 시간복잡도, 공간복잡도 O(n) + for i in range(1, n): + num1 = int(s[i]) + num2 = int(s[i -1 : i + 1]) + if 1 <= num1 <= 9: + dp[i] += dp[i - 1] + if 10 <= num2 <= 26: + if i == 1: + dp[i] += 1 + else: + dp[i] += dp[i - 2] + return dp[n-1] From b7232f61368248712e1e0c59a59d0930dfe18587 Mon Sep 17 00:00:00 2001 From: changhyumm Date: Sun, 30 Nov 2025 01:22:21 +0900 Subject: [PATCH 5/7] decode --- decode-ways/changhyumm.py | 47 ++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/decode-ways/changhyumm.py b/decode-ways/changhyumm.py index 26e5731ffe..5c5f67b900 100644 --- a/decode-ways/changhyumm.py +++ b/decode-ways/changhyumm.py @@ -1,25 +1,30 @@ class Solution: def numDecodings(self, s: str) -> int: - if s[0] == '0': - return 0 + memo = {} + + def decode(index): + # 이미 계산했으면 바로 반환 + if index in memo: + return memo[index] + + # 기저 사례 + ## 끝까지 왔으면 성공 + if index == len(s): + return 1 + ## 0으로 시작하면 불가능 + if s[index] == '0': + return 0 + + # 재귀 계산 + ways = decode(index + 1) + + if index + 1 < len(s) and int(s[index:index+2]) <= 26: + ways += decode(index + 2) + + # 메모이제이션 + memo[index] = ways + return ways - n = len(s) - # dp[i]를 i번쨰까지 처리했을떄의 경우의 수의 합으로 정의 - dp = [0] * n - # dp[0] = 1 (첫자리 수) - dp[0] = 1 - - # i번쨰 숫자가 1~9로 대체될 수 있으면 이전까지의 경우의 수 합을 이어감 - # i번쨰 숫자(두자리수)가 10~26으로 대체될 수 있으면 앞자리는 사용한 것이므로 그 앞자리까지의 상태를 가져옴 # 시간복잡도, 공간복잡도 O(n) - for i in range(1, n): - num1 = int(s[i]) - num2 = int(s[i -1 : i + 1]) - if 1 <= num1 <= 9: - dp[i] += dp[i - 1] - if 10 <= num2 <= 26: - if i == 1: - dp[i] += 1 - else: - dp[i] += dp[i - 2] - return dp[n-1] + + return decode(0) \ No newline at end of file From 0ce6c825bef215275d80493218a26dbf9ed3a4aa Mon Sep 17 00:00:00 2001 From: changhyumm Date: Sun, 30 Nov 2025 01:49:56 +0900 Subject: [PATCH 6/7] maximum-subarray --- maximum-subarray/changhyumm.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 maximum-subarray/changhyumm.py diff --git a/maximum-subarray/changhyumm.py b/maximum-subarray/changhyumm.py new file mode 100644 index 0000000000..b61abf7208 --- /dev/null +++ b/maximum-subarray/changhyumm.py @@ -0,0 +1,14 @@ +class Solution: + def maxSubArray(self, nums: List[int]) -> int: + max_total = nums[0] + total = 0 + # subarray는 array에서 서로 인접해야함 + # 인접한 값의 합이 마이너스인 경우, 그냥 현재 값만 사용하는게 합보다 큼 + # total 이 0보다 작은경우 그냥 0으로 변경 + for num in nums: + if total < 0: + total = 0 + total += num + max_total = max(total, max_total) + # 시간복잡도 O(n), 공간복잡도 O(1) + return max_total From f4570e887f0aecb40fb33971e8316f6477283c83 Mon Sep 17 00:00:00 2001 From: changhyumm Date: Sun, 30 Nov 2025 01:51:03 +0900 Subject: [PATCH 7/7] fix: line indent --- decode-ways/changhyumm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decode-ways/changhyumm.py b/decode-ways/changhyumm.py index 5c5f67b900..39c5664c6d 100644 --- a/decode-ways/changhyumm.py +++ b/decode-ways/changhyumm.py @@ -27,4 +27,4 @@ def decode(index): # 시간복잡도, 공간복잡도 O(n) - return decode(0) \ No newline at end of file + return decode(0)