From 624f908c80614475562451b76ef4897e3c9f0745 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Mon, 21 Apr 2025 18:04:05 +0900 Subject: [PATCH 1/7] merge-two-sorted-lists solution --- merge-two-sorted-lists/yyyyyyyyyKim.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 merge-two-sorted-lists/yyyyyyyyyKim.py diff --git a/merge-two-sorted-lists/yyyyyyyyyKim.py b/merge-two-sorted-lists/yyyyyyyyyKim.py new file mode 100644 index 000000000..e69de29bb From a3f69e6faeed5d4530adb039847ecba0582fab09 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Mon, 21 Apr 2025 23:00:12 +0900 Subject: [PATCH 2/7] merge-two-sorted-lists solution --- merge-two-sorted-lists/yyyyyyyyyKim.py | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/merge-two-sorted-lists/yyyyyyyyyKim.py b/merge-two-sorted-lists/yyyyyyyyyKim.py index e69de29bb..56966bed7 100644 --- a/merge-two-sorted-lists/yyyyyyyyyKim.py +++ b/merge-two-sorted-lists/yyyyyyyyyKim.py @@ -0,0 +1,32 @@ +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]: + + dummy = ListNode(-1) # 더미 시작 노드 + current = dummy # 현재 연결 위치 포인터 + + while list1 and list2: + + # 현재list1의 값과 현재list2값을 비교해서 current.next 연결 + if list1.val < list2.val: + current.next = list1 + list1 = list1.next + else: + current.next = list2 + list2 = list2.next + + # current 다음으로 이동 + current = current.next + + # 둘 중 하나가 남아있다면 나머지를 통째로 붙이기(삼항 연산자) + current.next = list1 if list1 else list2 + # if list1: + # current.next = list1 + # else: + # current.next = list2 + + return dummy.next From 54fcea112babe5cdd75564bbf3dd25c57ab7a918 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Tue, 22 Apr 2025 21:38:27 +0900 Subject: [PATCH 3/7] maximum-depth-of-binary-tree solution --- maximum-depth-of-binary-tree/yyyyyyyyyKim.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 maximum-depth-of-binary-tree/yyyyyyyyyKim.py diff --git a/maximum-depth-of-binary-tree/yyyyyyyyyKim.py b/maximum-depth-of-binary-tree/yyyyyyyyyKim.py new file mode 100644 index 000000000..96407ba07 --- /dev/null +++ b/maximum-depth-of-binary-tree/yyyyyyyyyKim.py @@ -0,0 +1,19 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def maxDepth(self, root: Optional[TreeNode]) -> int: + + # DFS, 재귀 + def dfs(root): + # 노드가 없으면 깊이 0 + if not root: + return 0 + + # 왼쪽과 오른쪽 중 더 깊은 쪽 + 1 리턴 + return 1 + max(dfs(root.left), dfs(root.right)) + + return dfs(root) From 3da533fb0fb335e9d6dabdc505809337175da316 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Wed, 23 Apr 2025 21:39:56 +0900 Subject: [PATCH 4/7] find-minimum-in-rotated-sorted-array solution --- .../yyyyyyyyyKim.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 find-minimum-in-rotated-sorted-array/yyyyyyyyyKim.py diff --git a/find-minimum-in-rotated-sorted-array/yyyyyyyyyKim.py b/find-minimum-in-rotated-sorted-array/yyyyyyyyyKim.py new file mode 100644 index 000000000..b0083e8e0 --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/yyyyyyyyyKim.py @@ -0,0 +1,24 @@ +class Solution: + def findMin(self, nums: List[int]) -> int: + """ + 시간복잡도: O(log n) - 이진 탐색 + 공간복잡도: O(1) - 추가 메모리 없음 + """ + + # 이진탐색 + left = 0 + right = len(nums) - 1 + + while left < right: + # 중간 인덱스 + mid = (left+right)//2 + + # 최소값이 오른쪽에 있음 + if nums[mid] > nums[right]: + left = mid + 1 + # 최소값이 왼쪽(중간포함)에 있음 + else: + right = mid + + # 최종 최소값 + return nums[left] From 37b3797247fa016f26fdf2be6b1445184dfcdd94 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Thu, 24 Apr 2025 21:41:27 +0900 Subject: [PATCH 5/7] word-search solution --- word-search/yyyyyyyyyKim.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 word-search/yyyyyyyyyKim.py diff --git a/word-search/yyyyyyyyyKim.py b/word-search/yyyyyyyyyKim.py new file mode 100644 index 000000000..f3676f0c4 --- /dev/null +++ b/word-search/yyyyyyyyyKim.py @@ -0,0 +1,32 @@ +class Solution: + def exist(self, board: List[List[str]], word: str) -> bool: + + # 백트래킹, DFS, 재귀 + def dfs(x, y, idx): + # 모든 글자를 다 찾았다면 True 리턴해서 종료 + if idx == len(word): + return True + + # 범위벗어나거나, 다른글자라면 False 리턴해서 종료(pruning가지치기) + if x < 0 or y < 0 or x >= len(board) or y >= len(board[0]) or board[x][y] != word[idx]: + return False + + t = board[x][y] # 현재값 t에 임시저장 + board[x][y] = ' ' # 방문표시 + + # 모든 방향(상하좌우) 탐색 + for i, j in [(-1,0), (1,0), (0,-1), (0,1)]: + if dfs(x+i, y+j, idx+1): + return True + + board[x][y] = t # 방문복원 + + return False + + + for i in range(len(board)): + for j in range(len(board[0])): + if dfs(i, j, 0): + return True + + return False \ No newline at end of file From e7edab15d6d050989ff1ca1997fc2e1b447e3c0b Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Thu, 24 Apr 2025 21:42:15 +0900 Subject: [PATCH 6/7] word-search solution --- word-search/yyyyyyyyyKim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/word-search/yyyyyyyyyKim.py b/word-search/yyyyyyyyyKim.py index f3676f0c4..c50808f33 100644 --- a/word-search/yyyyyyyyyKim.py +++ b/word-search/yyyyyyyyyKim.py @@ -29,4 +29,4 @@ def dfs(x, y, idx): if dfs(i, j, 0): return True - return False \ No newline at end of file + return False From 761312e087aecf676bbe3923eaf58114c1dd00e6 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Fri, 25 Apr 2025 23:49:10 +0900 Subject: [PATCH 7/7] coin-change solution --- coin-change/yyyyyyyyyKim.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 coin-change/yyyyyyyyyKim.py diff --git a/coin-change/yyyyyyyyyKim.py b/coin-change/yyyyyyyyyKim.py new file mode 100644 index 000000000..530aa9385 --- /dev/null +++ b/coin-change/yyyyyyyyyKim.py @@ -0,0 +1,20 @@ +class Solution: + def coinChange(self, coins: List[int], amount: int) -> int: + + # DP + dp = [10001]*(amount+1) + dp[0] = 0 + + # 1부터 amount까지 만들 수 있는 최소 동전의 수를 dp에 업데이트 + for i in range(1, amount+1): + for j in coins: + # dp[i-j]+1 : (i-j)원을 만드는 최소 동전 수 + 현재동전(j) 1개 사용 + # 현재금액(i)를 만들 수 있는 최소 동전 수 업데이트 + if i - j >= 0: + dp[i] = min(dp[i], dp[i-j]+1) + + # 업데이트된 값이 없으면 -1 리턴 + if dp[amount] == 10001: + return -1 + else: + return dp[amount]