diff --git a/invert-binary-tree/juhui-jeong.java b/invert-binary-tree/juhui-jeong.java index d03d60a5f1..1ebb6c6fea 100644 --- a/invert-binary-tree/juhui-jeong.java +++ b/invert-binary-tree/juhui-jeong.java @@ -1,6 +1,7 @@ /* - * 시간 복잡도: O(1) - * 공간 복잡도: O(1) +이전 풀이 + * 시간 복잡도: O(n) + * 공간 복잡도: O(n) */ public class Solution { public TreeNode invertTree(TreeNode root) { @@ -30,3 +31,30 @@ public TreeNode invertTree(TreeNode root) { return root; } } + +/** + * 시간 복잡도: O(n) + * 공간 복잡도: O(n) + * DFS 풀이 + */ +class Solution { + public TreeNode invertTree(TreeNode root) { + if (root == null) return null; + + Deque stack = new ArrayDeque<>(); + stack.push(root); + + while(!stack.isEmpty()) { + TreeNode cur = stack.pop(); + + TreeNode temp = cur.left; + cur.left = cur.right; + cur.right = temp; + + if (cur.left != null) stack.push(cur.left); + + if (cur.right != null) stack.push(cur.right); + } + return root; + } +} diff --git a/search-in-rotated-sorted-array/juhui-jeong.java b/search-in-rotated-sorted-array/juhui-jeong.java new file mode 100644 index 0000000000..89bec9ca9a --- /dev/null +++ b/search-in-rotated-sorted-array/juhui-jeong.java @@ -0,0 +1,34 @@ +/** + * 시간 복잡도: O(log n) + * 공간 복잡도: O(1) + */ +class Solution { + public int search(int[] nums, int target) { + int low = 0; + int high = nums.length - 1; + + while (low <= high) { + int mid = (low + high) / 2; + + if (nums[mid] == target) { + return mid; + } + // 왼쪽 구간이 정렬된 경우 + if (nums[low] <= nums[mid]) { + if (nums[low] <= target && target < nums[mid]) { + high = mid - 1; + } else { + low = mid + 1; + } + // 오른쪽 구간이 정렬된 경우 + } else { + if (nums[mid] < target && target <= nums[high]) { + low = mid + 1; + } else { + high = mid - 1; + } + } + } + return -1; + } +}