Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions climbing-stairs/ohkingtaek.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Solution:
def climbStairs(self, n: int) -> int:
"""
n번째 계단에 도달하는 서로 다른 방법의 수를 구한다.
한 번에 1칸 또는 2칸씩 올라갈 수 있으므로 DP를 사용하여 dp[i] = dp[i-1] + dp[i-2] 점화식을 사용한다.
시간복잡도 O(n), 계단을 한 번 순회하며 결과를 계산한다.
"""
dp = [0] * (n + 2)
dp[1] = 1
dp[2] = 2
for i in range(3, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
21 changes: 21 additions & 0 deletions product-of-array-except-self/ohkingtaek.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
"""
처음에 모두 곱한걸 나눈다고 생각했으나, 0을 나누기 힘들고 다른 방식으로 답이 있을거라 생각함.
각 요소에 대해 자신을 제외한 나머지 요소들의 곱을 계산.
왼쪽에서부터 곱을 계산하여 answer[i]에 저장하고, 오른쪽에서부터 곱을 계산하여 answer[i]에 곱함.
시간복잡도 O(n), 배열을 두 번 순회하여 결과를 계산.
"""
n = len(nums)
answer = [1] * n

left = 1
for i in range(n):
answer[i] = left
left *= nums[i]
right = 1
for i in range(n-1, -1, -1):
answer[i] *= right
right *= nums[i]

return answer
10 changes: 10 additions & 0 deletions valid-anagram/ohkingtaek.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from collections import Counter

class Solution:
def isAnagram(self, s: str, t: str) -> bool:
"""
두 문자열이 anagram인지 확인한다.
Counter를 사용하여 각 문자열의 문자 빈도수를 계산하고 비교한다.
시간복잡도 O(n), 문자열을 한 번 순회하여 빈도수를 계산
"""
return True if Counter(s) == Counter(t) else False
15 changes: 15 additions & 0 deletions validate-binary-search-tree/ohkingtaek.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
"""
DFS로 각 노드가 low < node.val < high 조건을 만족하는지 확인한다.
low와 high는 각각 왼쪽과 오른쪽 서브트리에서의 최대값과 최소값을 나타내며, 재귀적으로 확인한다.
"""
def dfs(node, low, high):
if not node:
return True
if not (low < node.val < high):
return False

return dfs(node.left, low, node.val) and dfs(node.right, node.val, high)

return dfs(root, float('-inf'), float('inf'))
Loading