Skip to content

Commit 67121cd

Browse files
authored
Merge pull request #961 from EcoFriendlyAppleSu/main
[์นœํ™˜๊ฒฝ์‚ฌ๊ณผ] week 8
2 parents 5d17ecf + afe3250 commit 67121cd

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

โ€Žclone-graph/EcoFriendlyAppleSu.kt

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package leetcode_study
2+
3+
/*
4+
* Graph Node ๋ณต์‚ฌ ๋ฌธ์ œ
5+
* queue๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ
6+
* ์ƒˆ๋กœ ์ƒ์„ฑํ•œ Node์— ๋Œ€ํ•ด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฌดํ•œ Loop์— ๋น ์ง€๊ฒŒ๋จ -> ๊ฐ ๋…ธ๋“œ๊ฐ€ ์–‘๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ.
7+
* ๋”ฐ๋ผ์„œ, Map ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด Map<๊ธฐ์กด Node, ๋ณต์‚ฌ Node>์˜ ๋ชจ์Šต์œผ๋กœ Key-Value ์Œ์œผ๋กœ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ‘œํ˜„
8+
*
9+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
10+
* -> graph์˜ Node๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜์—ฌ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •: O(n)
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„:
12+
* -> ๋ณต์‚ฌ๋œ Node๋ฅผ ๋งคํ•‘ํ•˜๋Š” Map ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํฌ๊ธฐ: O(n)
13+
* -> BFS๋ฅผ ์‚ฌ์šฉํ•œ queue size: O(n)
14+
* -> ์ƒˆ๋กœ ์ƒ์„ฑ๋œ Node์˜ neighbor list: O(n)
15+
* */
16+
fun cloneGraph(node: Node?): Node? {
17+
if (node == null) return null
18+
if (node.neighbors.isEmpty()) return Node(1)
19+
20+
// Map< ๊ธฐ์กด Node, ๋ณต์‚ฌ Node>
21+
val nodeMap = mutableMapOf<Node, Node>()
22+
23+
val queue = ArrayDeque<Node>()
24+
queue.add(node)
25+
nodeMap[node] = Node(node.`val`)
26+
27+
while (queue.isNotEmpty()) {
28+
val current = queue.removeFirst()
29+
val clonedNode = nodeMap[current]!! // ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋ณต์ œ๋ณธ
30+
31+
for (neighbor in current.neighbors) {
32+
if (neighbor == null) continue
33+
34+
// ํ•ด๋‹น ์ด์›ƒ์ด ์•„์ง ๋ณต์‚ฌ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ณต์‚ฌํ•˜์—ฌ ๋งต์— ์ €์žฅํ•˜๊ณ  ํ์— ์ถ”๊ฐ€
35+
if (!nodeMap.containsKey(neighbor)) {
36+
nodeMap[neighbor] = Node(neighbor.`val`)
37+
queue.add(neighbor)
38+
}
39+
40+
// ๋ณต์ œ๋œ ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ด์›ƒ ๋ฆฌ์ŠคํŠธ์— ๋ณต์ œ๋œ ์ด์›ƒ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€
41+
// ์–‘๋ฐฉํ–ฅ์„ ๋”ฐ์งˆ ํ•„์š” ์—†์ด ๋‚ด๋ถ€ neighbor node list์— ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์žˆ์Œ
42+
clonedNode.neighbors.add(nodeMap[neighbor])
43+
}
44+
}
45+
return nodeMap[node]
46+
}
47+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package leetcode_study
2+
3+
/*
4+
* ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ์— @Dale ๋‹˜์˜ ์„ค๋ช… ์ฐธ๊ณ . Sliding Window ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
5+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
6+
* -> ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ: O(n)
7+
* -> ๋ฌธ์ž์˜ ๋นˆ๋„ ๊ฐฑ์‹  ์—ฐ์‚ฐ: O(1)
8+
*
9+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
10+
* -> ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ Map ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ. ์ตœ๋Œ€ 26๊ฐœ์˜ ๋Œ€๋ฌธ์ž ์ €์žฅ ๊ณต๊ฐ„ ํ•„์š”: O(1)
11+
* */
12+
fun characterReplacement(s: String, k: Int): Int {
13+
var maxLen = 0
14+
val counter = mutableMapOf<Char, Int>()
15+
var start = 0
16+
17+
for (end in s.indices) {
18+
counter[s[end]] = counter.getOrDefault(s[end], 0) + 1 // character mapping
19+
20+
// ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ค์–ด์žˆ๋Š” ๊ธ€์ž์˜ ์ˆ˜๋ฅผ ๋บ€ ๊ฐ’์ด k๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์‹œ์ž‘(start) ํฌ์ธํ„ฐ๋ฅผ ์ด๋™
21+
// k ๋งŒํผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ, ์—ฐ์†ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ •
22+
while (end - start + 1 - (counter.values.maxOrNull() ?: 0) > k) {
23+
counter[s[start]] = counter.getOrDefault(s[start], 0) - 1
24+
start++
25+
}
26+
27+
// ํƒ์ƒ‰ํ•œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด์˜ ๊ฐ’์„ ์ €์žฅ
28+
maxLen = maxOf(maxLen, end - start + 1)
29+
}
30+
return maxLen
31+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package leetcode_study
2+
3+
//
4+
/*
5+
* ์ฃผ์–ด์ง„ ์–‘์˜ ์ •์ˆ˜(n)๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ, 1์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ (1 <= n <= 2^31 -1. ์ฆ‰, ์–‘์˜ ์ •์ˆ˜)
6+
* _> ์ˆซ์ž๊ฐ€ Decimal๋กœ ์ฃผ์–ด์ง€๋”๋ผ๋„ bit ์—ฐ์‚ฐ์—์„œ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ binary ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
7+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)
8+
* -> masking ์—ฐ์‚ฐ์€ ํ•ญ์ƒ 32๋ฒˆ ๊ณ ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„
9+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
10+
* -> ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์—†์ด ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜ count, mask๋งŒ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜ ๊ณต๊ฐ„ ๋ณต์žก๋„
11+
* */
12+
fun hammingWeight(n: Int): Int {
13+
var count = 0
14+
var mask = 1 shl 31
15+
while (mask != 0) {
16+
if (n and mask != 0) {
17+
count++
18+
}
19+
mask = mask ushr 1
20+
}
21+
return count
22+
}

0 commit comments

Comments
ย (0)