From 98e52e7cb6dc1cae2900e095c3cee20486608df2 Mon Sep 17 00:00:00 2001 From: HISEHOONAN Date: Tue, 22 Apr 2025 11:00:48 +0900 Subject: [PATCH 1/3] Solutuon Find-Minimum-in-rotated-sorted-array --- .../HISEHOONAN.swift | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 find-minimum-in-rotated-sorted-array/HISEHOONAN.swift diff --git a/find-minimum-in-rotated-sorted-array/HISEHOONAN.swift b/find-minimum-in-rotated-sorted-array/HISEHOONAN.swift new file mode 100644 index 000000000..53d3f6ba2 --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/HISEHOONAN.swift @@ -0,0 +1,31 @@ +//그냥 정렬 하고 0번째 인덱스 원소 추출 +//O(nlogn) +// class Solution { +// func findMin(_ nums: [Int]) -> Int { +// var sortednums = nums.sorted() +// return sortednums[0] +// } +// } + + +//이진 탐색 +//배열이 다 정렬이 되어야 가능하지 않나? 했는데 +//이 문제는 '회전된 정렬 배열'이라서 이진 탐색이 가능하다캄. +//O(logn) +class Solution { + func findMin(_ nums: [Int]) -> Int { + var left = 0 + var right = nums.count - 1 + + while left < right{ + var mid = (left+right)/2 + if nums[mid] > nums[right]{ + left = mid + 1 + }else{ + right = mid + } + } + + return nums[left] + } +} From 7d409d89d54195a1c7b8c6ad530506bc1de45b6e Mon Sep 17 00:00:00 2001 From: HISEHOONAN Date: Thu, 24 Apr 2025 22:29:56 +0900 Subject: [PATCH 2/3] Solution merge - two -sorted - list --- merge-two-sorted-lists/HISEHOONAN.swift | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 merge-two-sorted-lists/HISEHOONAN.swift diff --git a/merge-two-sorted-lists/HISEHOONAN.swift b/merge-two-sorted-lists/HISEHOONAN.swift new file mode 100644 index 000000000..43a45e6e2 --- /dev/null +++ b/merge-two-sorted-lists/HISEHOONAN.swift @@ -0,0 +1,48 @@ +// +// Merge_Two_Sorted_Lists.swift +// Algorithm +// +// Created by 안세훈 on 4/22/25. +// + +/** + * Definition for singly-linked list. + * public class ListNode { + * public var val: Int + * public var next: ListNode? + * public init() { self.val = 0; self.next = nil; } + * public init(_ val: Int) { self.val = val; self.next = nil; } + * public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; } + * } + */ +class Solution { + func mergeTwoLists(_ list1: ListNode?, _ list2: ListNode?) -> ListNode? { + //list1, list2가 nil일 경우를 대비해 전처리 + guard list1 != nil else { return list2 } + guard list2 != nil else { return list1 } + + //초기화 Node + var head : ListNode? = ListNode(0) + + //연산을 위한 Node + var current = head + var l1 = list1 + var l2 = list2 + + while l1 != nil && l2 != nil{ //두 리스트 모두 nil이 아닐 경우에만 연산. + if let val1 = l1?.val, let val2 = l2?.val{ //비교할 node를 각각 list1?.val, list2?.val로 안전히 바인딩 + if val1 < val2{ //두 수 비교 + current?.next = ListNode(val1) //reusltNode의 다음을 작은수로 설정 + l1 = l1?.next //연산 후 다음 노드로 넘김 + }else{ + current?.next = ListNode(val2) //reusltNode의 다음을 작은수로 설정 + l2 = l2?.next //연산 후 다음 노드로 넘김 + } + current = current?.next //연산 후 결과 노드도 다음으로 넘김 + } + } + current?.next = l1 ?? l2 //while이 끝난 후 남은 노드는 뒤에 붙힘 + + return head?.next + } +} From a8d60854f16541f6dc5ad068255a77ddb456f8b1 Mon Sep 17 00:00:00 2001 From: HISEHOONAN Date: Fri, 25 Apr 2025 09:08:28 +0900 Subject: [PATCH 3/3] Solution maximum - depth - of - binary - tree --- maximum-depth-of-binary-tree/HISEHOONAN.swift | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 maximum-depth-of-binary-tree/HISEHOONAN.swift diff --git a/maximum-depth-of-binary-tree/HISEHOONAN.swift b/maximum-depth-of-binary-tree/HISEHOONAN.swift new file mode 100644 index 000000000..fcc2a07f0 --- /dev/null +++ b/maximum-depth-of-binary-tree/HISEHOONAN.swift @@ -0,0 +1,32 @@ +// +// Merge_Two_Sorted_Lists.swift +// Algorithm +// +// Created by 안세훈 on 4/22/25. +// + +/** + * Definition for a binary tree node. + * public class TreeNode { + * public var val: Int + * public var left: TreeNode? + * public var right: TreeNode? + * public init() { self.val = 0; self.left = nil; self.right = nil; } + * public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; } + * public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) { + * self.val = val + * self.left = left + * self.right = right + * } + * } + */ +class Solution { + func maxDepth(_ root: TreeNode?) -> Int { + guard root != nil else { return 0 } //nil일 경우 깊이 0으로 처리 + + var leftdepth = maxDepth(root?.left) //왼쪽 노드의 깊이 탐색 + var rightdepth = maxDepth(root?.right) //오른쪽 노드의 깊이 탐색 + + return max(leftdepth, rightdepth) + 1 //더 깊은 곳과 자기 자신을 위해 + 1을 해서 리턴. + } +}