Skip to content

Commit 13ba8ba

Browse files
authored
Merge pull request #1033 from EcoFriendlyAppleSu/main
[์นœํ™˜๊ฒฝ์‚ฌ๊ณผ] Week 11
2 parents 3887c3b + 3800d3c commit 13ba8ba

File tree

3 files changed

+149
-0
lines changed

3 files changed

+149
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package leetcode_study
2+
3+
/*
4+
* ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
5+
* ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
7+
* -> ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ
8+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) ํ˜น์€ O(log n)
9+
* -> findDepth() ํ•จ์ˆ˜๋Š” ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์ฝœ ์Šคํƒ์— ์Œ“์ž„
10+
* -> ๊ท ํ˜•์žกํžŒ ์ด์ง„ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ์žฌ๊ท€์˜ ๊นŠ์ด๋Š” O(log n) ์†Œ์š”
11+
* -> ํŽธํ–ฅ๋œ ์ด์ง„ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ์žฌ๊ท€์˜ ๊นŠ์ด๋Š” O(n) ์†Œ์š”
12+
* */
13+
fun maxDepth(root: TreeNode?): Int {
14+
if (root == null) return 0
15+
val maxValue = findDepth(root, 1) // ์‹œ์ž‘ ๊นŠ์ด ๊ฐ’์€ `1`
16+
return maxValue
17+
}
18+
19+
fun findDepth(currentNode: TreeNode?, depth: Int): Int{
20+
// escape condition
21+
if (currentNode == null) {
22+
return depth - 1
23+
}
24+
25+
val leftValue = findDepth(currentNode.left, depth + 1)
26+
val rightValue = findDepth(currentNode.right, depth + 1)
27+
return maxOf(leftValue, rightValue)
28+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package leetcode_study
2+
3+
/*
4+
* ์ฃผ์–ด์ง„ ๋ฒ”์œ„ ๊ฐ’ ๋ณ‘ํ•ฉ ๋ฌธ์ œ
5+
* */
6+
7+
/*
8+
* ์ฒซ ๋ฒˆ์งธ ํ’€์ด. ํ‹€๋ฆผ
9+
* ๋ฒ”์œ„ ์•ˆ์— ์†ํ•˜๋Š” ๋ชจ๋“  ๊ฐ’์„ Set ์ž๋ฃŒ๊ตฌ์กฐ์— ๋„ฃ๊ณ  ์ œ์ผ ํฐ ์ˆซ์ž ๋งŒํผ์˜ Boolean Array๋ฅผ ๋งŒ๋“  ํ›„ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผ
10+
* ์˜ˆ์™ธ ์ผ€์ด์Šค
11+
* intervals = [[1,4],[5,6]] ์ผ ๋•Œ,
12+
* ์—ฐ์†๋œ ๊ฐ’์œผ๋กœ ์ธ์‹ํ•ด ๋‹ต์„ [[1,6]]๋กœ ๋„์ถœ. ์˜ฌ๋ฐ”๋ฅธ ๋‹ต์€ [[1,4],[5,6]]
13+
* */
14+
fun merge01(intervals: Array<IntArray>): Array<IntArray> {
15+
val tempSet = mutableSetOf<Int>()
16+
var maxValue = Int.MIN_VALUE
17+
18+
for (interval in intervals) {
19+
val leftValue = interval[0]
20+
val rightValue = interval[1]
21+
maxValue = max(maxValue, rightValue)
22+
for (value in leftValue until rightValue + 1) {
23+
tempSet.add(value)
24+
}
25+
}
26+
27+
val checkVisited = BooleanArray(maxValue + 1) { false }
28+
for (value in tempSet) {
29+
checkVisited[value] = true
30+
}
31+
32+
val result = mutableListOf<IntArray>()
33+
var start: Int? = null
34+
35+
for (i in checkVisited.indices) {
36+
if (checkVisited[i]) {
37+
if (start == null) start = i // ์‹œ์ž‘์  ์ €์žฅ
38+
// ์—ฐ์†๋œ ๊ฐ’์ด true์ผ ๊ฒฝ์šฐ์—” ๋„˜์–ด๊ฐ
39+
} else {
40+
if (start != null) {
41+
result.add(intArrayOf(start, i - 1)) // [start, end] ์ถ”๊ฐ€
42+
start = null
43+
}
44+
}
45+
}
46+
if (start != null) {
47+
result.add(intArrayOf(start, checkVisited.lastIndex))
48+
}
49+
50+
return result.toTypedArray()
51+
}
52+
53+
/*
54+
* ์ฃผ์–ด์ง„ ๋ฒ”์œ„ ๊ฐ’์„ ์ •๋ ฌํ•˜๊ณ  ์ˆœํšŒํ•˜๋ฉด์„œ ๋ณ‘ํ•ฉ ์—ฌ๋ถ€ ํŒ๋‹จ
55+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n log n)
56+
* -> ์ฒซ ๋ฒˆ์งธ ์›์†Œ ๊ธฐ์ค€์œผ๋กœ TimSort ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ ์ •๋ ฌ: O(n log n)
57+
* -> ์ฃผ์–ด์ง„ interval ๋งŒํผ ์ˆœํšŒํ•ด ๊ณ„์‚ฐ: O(n)
58+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
59+
* -> ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋กœ ์ •๋ ฌ๋œ sortedIntervals๋ฅผ ๋‹ด๋Š” ๊ณต๊ฐ„: O(n)
60+
* */
61+
fun merge02(intervals: Array<IntArray>): Array<IntArray> {
62+
if (intervals.isEmpty()) return intervals
63+
64+
// ์‹œ์ž‘์  ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
65+
val sortedIntervals = intervals.sortedBy { it[0] }
66+
67+
val result = mutableListOf<IntArray>()
68+
var currentInterval = sortedIntervals[0]
69+
70+
for (i in 1 until sortedIntervals.size) {
71+
val interval = sortedIntervals[i]
72+
// ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ: ํ˜„์žฌ ๊ตฌ๊ฐ„์˜ ๋์ด ๋‹ค์Œ ๊ตฌ๊ฐ„์˜ ์‹œ์ž‘๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด merge
73+
if (currentInterval[1] >= interval[0]) {
74+
currentInterval[1] = maxOf(currentInterval[1], interval[1])
75+
} else {
76+
// ๊ฒน์น˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๊ตฌ๊ฐ„์„ ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ƒˆ ๊ตฌ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ
77+
result.add(currentInterval)
78+
currentInterval = interval
79+
}
80+
}
81+
// ๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„ ์ถ”๊ฐ€
82+
result.add(currentInterval)
83+
84+
return result.toTypedArray()
85+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package leetcode_study
2+
3+
/*
4+
* singly linked list๋ฅผ ์žฌ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ
5+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
6+
* -> ์ „์ฒด ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ˆœํ™˜ํ•˜๋Š” ๊ณผ์ • O(n)
7+
* -> ๋ฆฌ์ŠคํŠธ์˜ ์•ž๊ณผ ๋’ค์— ํฌ์ธํ„ฐ๋ฅผ ๋‘๊ณ  ์ฃผ์†Œ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ • O(log n)
8+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
9+
* -> ๋…ธ๋“œ ์ „์ฒด๋ฅผ ๋‹ด์„ ์ƒˆ๋กœ์šด list ํ•„์š” O(n)
10+
* */
11+
fun reorderList(head: ListNode?): Unit {
12+
val tempNodeList = mutableListOf<ListNode>()
13+
var currentNode = head
14+
15+
while (currentNode != null) {
16+
tempNodeList.add(currentNode)
17+
currentNode = currentNode.next
18+
}
19+
20+
// ์–‘์ชฝ ๋์—์„œ๋ถ€ํ„ฐ ๊ต์ฐจ๋กœ ์—ฐ๊ฒฐ
21+
var i = 0
22+
var j = tempNodeList.size - 1
23+
while (i < j) {
24+
// ๋จผ์ € ์•ž์ชฝ ๋…ธ๋“œ์˜ next๊ฐ€ ๋’ค์ชฝ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
25+
tempNodeList[i].next = tempNodeList[j]
26+
i++ // ๋‹ค์Œ ์•ž์ชฝ ๋…ธ๋“œ ์„ ํƒ
27+
28+
// ๋งŒ์•ฝ ์•ž์ชฝ๊ณผ ๋’ค์ชฝ์ด ๋งŒ๋‚œ ๊ฒฝ์šฐ (์ง์ˆ˜๊ฐœ์ผ ๋•Œ), ๋ฐ˜๋ณต ์ข…๋ฃŒ
29+
if (i == j) break
30+
31+
// ๋’ค์ชฝ ๋…ธ๋“œ์˜ next๊ฐ€ ์ƒˆ๋กœ์šด ์•ž์ชฝ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
32+
tempNodeList[j].next = tempNodeList[i]
33+
j-- // ๋‹ค์Œ ๋’ค์ชฝ ๋…ธ๋“œ ์„ ํƒ
34+
}
35+
tempNodeList[i].next = null
36+
}

0 commit comments

Comments
ย (0)