File tree Expand file tree Collapse file tree 2 files changed +77
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 2 files changed +77
-0
lines changed Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /*
4+ * binary tree ์ข์ฐ ๋ฒ๊ฒฝ ๋ฌธ์
5+ * ์ฌ๊ท๋ฅผ ํตํด ๋ฌธ์ ํด๊ฒฐ
6+ * ์๊ฐ ๋ณต์ก๋: O(n)
7+ * -> n๊ฐ์ ๋
ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธ
8+ * ๊ณต๊ฐ ๋ณต์ก๋: O(n) ํน์ O(log n)
9+ * -> ์ฌ๊ท ์ฌ์ฉ ์ ์คํ์ ์์
10+ * -> ๊ท ํ์กํ binary tree์ ๊ฒฝ์ฐ O(log n)์ ๊ณต๊ฐ์ด ํ์ํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ(์ต์
์ ๊ฒฝ์ฐ) O(n)์ ๊ณต๊ฐ ๋ณต์ก๋ ์๊ตฌ
11+ * */
12+ fun invertTree (root : TreeNode ? ): TreeNode ? {
13+ recursiveNode(root)
14+ return root
15+ }
16+
17+ fun recursiveNode (parentNode : TreeNode ? ) {
18+ if (parentNode == null ) return
19+
20+ swapNode(parentNode) // ํ์ฌ ๋
ธ๋์ left์ right๋ฅผ ๊ตํ
21+ recursiveNode(parentNode.left) // ์ผ์ชฝ ์๋ธํธ๋ฆฌ ํ์
22+ recursiveNode(parentNode.right) // ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ํ์
23+ }
24+
25+ fun swapNode (parentNode : TreeNode ? ) {
26+ if (parentNode == null ) return
27+
28+ val temp = parentNode.left
29+ parentNode.left = parentNode.right
30+ parentNode.right = temp
31+ }
32+
33+ class TreeNode (var `val `: Int ) {
34+ var left: TreeNode ? = null
35+ var right: TreeNode ? = null
36+ }
Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /*
4+ * ํ์ ๋(shifted) ์ ๋ ฌ ๋ฐฐ์ด์์ O(log n) ์๊ฐ ๋ณต์ก๋๋ก target ๊ฐ์ index๋ฅผ ์ฐพ๋ ๋ฌธ์
5+ *
6+ * ์ด์ง ํ์ (Binary Search) ์ฌ์ฉ
7+ * ๊ฐ ๋ฐ๋ณต๋ง๋ค ์ค๊ฐ ๊ฐ(mid)์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ์ ๋ฐ์ฉ ์ค์ด๋ฉฐ ํ์
8+ * ๋ฐฐ์ด์ ํ์ชฝ ์ ๋ฐ์ ํญ์ ์ ๋ ฌ๋์ด ์์ผ๋ฏ๋ก, ์ ๋ ฌ๋ ๊ตฌ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ ๋ฐฉํฅ ๊ฒฐ์
9+ *
10+ * ์๊ฐ ๋ณต์ก๋: O(log n)
11+ * -> ๋งค๋ฒ ํ์ ๊ณต๊ฐ์ ์ ๋ฐ์ผ๋ก ์ค์ด๋ฏ๋ก O(log n)
12+ * ๊ณต๊ฐ ๋ณต์ก๋: O(1)
13+ * -> ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ๋ณ์๋ง ์ฌ์ฉํ๋ฏ๋ก O(1)
14+ * */
15+ fun search (nums : IntArray , target : Int ): Int {
16+ var start = 0
17+ var end = nums.size - 1
18+
19+ while (start <= end) {
20+ val mid = start + (end - start) / 2
21+ if (nums[mid] == target) return mid
22+
23+ // ์ผ์ชฝ ๋ถ๋ถ์ด ์ ๋ ฌ๋ ๊ฒฝ์ฐ
24+ if (nums[start] <= nums[mid]) {
25+ if (nums[start] <= target && target < nums[mid]) {
26+ end = mid - 1 // ์ผ์ชฝ์์ ํ์
27+ } else {
28+ start = mid + 1 // ์ค๋ฅธ์ชฝ์์ ํ์ -> ๋ค์ ๋ฃจํ์์ ์ ๋ ฌ๋์ง ์์ ์ค๋ฅธ์ชฝ ํ์
29+ }
30+ }
31+ // ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ด ์ ๋ ฌ๋ ๊ฒฝ์ฐ
32+ else {
33+ if (nums[mid] < target && target <= nums[end]) {
34+ start = mid + 1 // ์ค๋ฅธ์ชฝ์์ ํ์
35+ } else {
36+ end = mid - 1 // ์ผ์ชฝ์์ ํ์ -> ๋ค์ ๋ฃจํ์์ ์ ๋ ฌ๋์ง ์์ ์ผ์ชฝ ํ์
37+ }
38+ }
39+ }
40+ return - 1
41+ }
You canโt perform that action at this time.
0 commit comments