diff --git a/combination-sum/Donghae0230.py b/combination-sum/Donghae0230.py new file mode 100644 index 0000000000..57e24072bb --- /dev/null +++ b/combination-sum/Donghae0230.py @@ -0,0 +1,21 @@ +# 문제 풀이 +# 모든 경우의 수를 탐색하기 위해 백트래킹 사용 +# - 현재 조합의 합이 target보다 크면 종료 +# - 현재 조합의 합이 target과 같으면 결과에 추가 + +class Solution: + def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: + def backtrack(start, combination): + if sum(combination) > target: + return + if sum(combination) == target: + result.append(combination[:]) + return + for i in range(start, len(candidates)): + combination.append(candidates[i]) + backtrack(i, combination) + combination.pop() + + result = [] + backtrack(0, []) + return result diff --git a/number-of-1-bits/Donghae0230.py b/number-of-1-bits/Donghae0230.py new file mode 100644 index 0000000000..7b91c45c6d --- /dev/null +++ b/number-of-1-bits/Donghae0230.py @@ -0,0 +1,21 @@ +# 문제 풀이 +# 1. 입력값 n을 binary 형태로 변환 +# - 입력값 n이 1보다 크면 2로 나눠 몫과 나머지 계산 +# - 나머지를 리스트에 추가해 반환 +# 2. 반환된 리스트에서 1의 갯수 반환 + +# 시간복잡도 O(log n): n을 2로 나누면서 재귀 함수 실행 +# 공간복잡도 O(log n): 비트를 저장하는 리스트의 길이 + +class Solution: + def devide_by_2 (self, n, temp): + if n > 1 : + temp.append(n % 2) + return self.devide_by_2(n // 2, temp) + temp.append(1) + return n, temp + + def hammingWeight(self, n: int) -> int: + result = [] + n, result = self.devide_by_2(n, result) + return result.count(1) diff --git a/valid-palindrome/Donghae0230.py b/valid-palindrome/Donghae0230.py new file mode 100644 index 0000000000..adb74cff68 --- /dev/null +++ b/valid-palindrome/Donghae0230.py @@ -0,0 +1,16 @@ +# 문제 풀이 +# 1. 문자열을 소문자로 변환 후 문자와 숫자가 아닌 값을 제거 +# 2. 문자열을 뒤집은 후 원래 문자열과 비교 + +# 시간복잡도 O(n): 문자열 처리(re.sub, reversed 등) 사용 +# 공간복잡도 O(n): 원래 문자열 만큼의 공간 사용 +import re + +class Solution: + def isPalindrome(self, s: str) -> bool: + cleaned_s = re.sub(r'[^a-zA-Z0-9]', '', s.lower()) + reversed_s = ''.join(reversed(cleaned_s)) + if cleaned_s == reversed_s: + return True + else: + return False