diff --git a/combination-sum/yyyyyyyyyKim.py b/combination-sum/yyyyyyyyyKim.py new file mode 100644 index 000000000..75a0b7590 --- /dev/null +++ b/combination-sum/yyyyyyyyyKim.py @@ -0,0 +1,25 @@ +class Solution: + def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: + + answer = [] + + # 재귀 + def backtrack(start, path, total): + # total이 target과 같아지면 path복사해서 answer에 추가하고 종료 + if total == target: + answer.append(path[:]) + return + + # total이 target값 넘어가면 종료 + if total > target: + return + + for i in range(start, len(candidates)): + path.append(candidates[i]) # 일단 path에 추가하고 + backtrack(i, path, total + candidates[i]) # 검증하기 + path.pop() # 마지막 값 꺼내고 다음으로 + + # backtrack 함수호출 + backtrack(0, [], 0) + + return answer diff --git a/decode-ways/yyyyyyyyyKim.py b/decode-ways/yyyyyyyyyKim.py new file mode 100644 index 000000000..6cc356786 --- /dev/null +++ b/decode-ways/yyyyyyyyyKim.py @@ -0,0 +1,24 @@ +class Solution: + def numDecodings(self, s: str) -> int: + + # DP + dp = [0]*(len(s)+1) + + # s가 0으로 시작하면 0 return + if s[0] == '0': + return 0 + + dp[0] = 1 # 빈문자열은 해석가능한 1가지 경우로 취급 (초기기준점 역할, dp[i-2]계산시필요) + dp[1] = 1 # 첫번째자리의 처리방법은 1가지 + + # len(s)가 2 이상일때 + for i in range(2,len(s)+1): + one = int(s[i-1]) # 한자리(현재자리) + two = int(s[i-2:i]) # 한자리 + 앞자리 = 두자리 + + if 1 <= one <= 9: + dp[i] += dp[i-1] + if 10 <= two <= 26: + dp[i] += dp[i-2] + + return dp[len(s)] diff --git a/maximum-subarray/yyyyyyyyyKim.py b/maximum-subarray/yyyyyyyyyKim.py new file mode 100644 index 000000000..bc8d5af86 --- /dev/null +++ b/maximum-subarray/yyyyyyyyyKim.py @@ -0,0 +1,14 @@ +class Solution: + def maxSubArray(self, nums: List[int]) -> int: + # 시간복잡도: O(n) - nums 배열을 한 번만 순회함 + # 공간복잡도: O(n) - dp 배열을 nums 길이만큼 생성 + + # DP + dp = [0]*len(nums) + dp[0] = nums[0] # 초기화 + + for i in range(1,len(nums)): + # 현재값과 (이전까지의 합 + 현재값) 중 더 큰 값을 dp[i]에 저장 + dp[i] = max(nums[i], nums[i]+dp[i-1]) + + return max(dp) diff --git a/number-of-1-bits/yyyyyyyyyKim.py b/number-of-1-bits/yyyyyyyyyKim.py new file mode 100644 index 000000000..ee1c10211 --- /dev/null +++ b/number-of-1-bits/yyyyyyyyyKim.py @@ -0,0 +1,9 @@ +class Solution: + def hammingWeight(self, n: int) -> int: + answer = 0 + + while n > 0: + answer += n%2 #나머지(현재 비트가 1이면 ++) + n //= 2 #몫(다음 비트로 이동) + + return answer diff --git a/valid-palindrome/yyyyyyyyyKim.py b/valid-palindrome/yyyyyyyyyKim.py new file mode 100644 index 000000000..06e04d726 --- /dev/null +++ b/valid-palindrome/yyyyyyyyyKim.py @@ -0,0 +1,14 @@ +class Solution: + def isPalindrome(self, s: str) -> bool: + + # 소문자로 변경 + s = s.lower() + p = "" + + # 문자,숫자만 뽑기 + for i in range(len(s)): + if (ord(s[i]) > 96 and ord(s[i]) < 123) or (ord(s[i]) >= 48 and ord(s[i]) <= 57): + p += s[i] + + # 문자열 뒤집기 + return p == p[::-1]