Skip to content

Commit d02ead8

Browse files
Merge pull request #923 from EcoFriendlyAppleSu/main
[์นœํ™˜๊ฒฝ์‚ฌ๊ณผ] Week 7
2 parents 21c512f + f001f5b commit d02ead8

File tree

5 files changed

+171
-0
lines changed

5 files changed

+171
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package leetcode_study
2+
3+
/*
4+
* ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์€ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
5+
* ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ฐ”๊นฅ ๋ฐ˜๋ณต๋ฌธ์—์„  ์‹œ์ž‘ ๋ฌธ์ž๋ฅผ ๋‚ด๋ถ€ ๋ฐ˜๋ณต๋ฌธ์—์„  ๊ทธ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ค‘๋ณต๋œ ๋ฌธ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์„ ๋•Œ, ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2)
7+
* -> ์ด์ค‘ ๋ฐ˜๋ณต ๊ณผ์ •
8+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
9+
* -> ์ค‘๋ณต๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด์„ ๋‹ด์„ ๊ณต๊ฐ„ ํ•„์š”
10+
* */
11+
fun lengthOfLongestSubstring(s: String): Int {
12+
var maximumLength = 0
13+
for (start in s.indices) {
14+
val tempList = mutableListOf<Char>()
15+
for (end in start until s.length) {
16+
if (tempList.contains(s[end])) {
17+
break // escape loop
18+
}
19+
tempList.add(s[end])
20+
maximumLength = max(tempList.size, maximumLength)
21+
}
22+
}
23+
return maximumLength
24+
}
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+
/*
5+
* ์„ฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
6+
* bfs๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ
7+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2)
8+
* -> ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ชจ๋“  ๋ฐฐ์—ด์„ ์ˆœํšŒ
9+
* -> bfs queue ์ˆœํšŒ
10+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n^2)
11+
* -> ๋ฐฉ๋ฌธ์„ ํ‘œ์‹œํ•˜๋Š” board
12+
* -> bfs์— ์‚ฌ์šฉ๋˜๋Š” queue size
13+
* */
14+
val dx = listOf(0, 1, -1, 0)
15+
val dy = listOf(1, 0, 0, -1)
16+
17+
fun numIslands(grid: Array<CharArray>): Int {
18+
val board = Array(grid.size) { BooleanArray(grid[0].size) { false } }
19+
var result = 0
20+
for (i in grid.indices) {
21+
for (j in grid[0].indices) {
22+
if (grid[i][j] == '1' && board[i][j] == false) {
23+
bfs(grid, board, i ,j)
24+
result += 1
25+
}
26+
}
27+
}
28+
return result
29+
}
30+
31+
fun bfs(grid: Array<CharArray>, board: Array<BooleanArray>, x: Int, y: Int) {
32+
val queue = ArrayDeque<Pair<Int, Int>>()
33+
queue.add(Pair(x, y))
34+
board[x][y] = true
35+
36+
while (queue.isNotEmpty()) {
37+
val (row, col) = queue.removeFirst()
38+
for (i in IntRange(0, 3)) {
39+
val nx = row + dx[i]
40+
val ny = col + dy[i]
41+
if (nx >= 0 && nx < grid.size && ny >= 0 && ny < grid[0].size && !board[nx][ny] && grid[nx][ny] == '1') {
42+
queue.add(Pair(nx, ny))
43+
board[nx][ny] = true
44+
}
45+
}
46+
}
47+
}
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+
* Node๋ฅผ ์—ญ์ˆœ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ
5+
* ์ถ”๊ฐ€ ์ €์žฅ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•ด ๋…ธ๋“œ๋ฅผ ์ฑ„์›Œ ๋‘” ๋’ค ์—ญํ–‰ํ•˜๋ฉด์„œ ํฌ์ธํ„ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
7+
* -> ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ: O(n)
8+
* -> ๊ฐ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜์—ฌ ํฌ์ธํ„ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ: O(n)
9+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
10+
* -> ์ฃผ์–ด์ง„ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์„๋งŒํผ ์ €์žฅ ๊ณต๊ฐ„ ํ•„์š”: O(n)
11+
* */
12+
fun reverseList(head: ListNode?): ListNode? {
13+
val stack = mutableListOf<ListNode>()
14+
var currentNode = head
15+
if (head == null) return null
16+
17+
while (currentNode != null) {
18+
stack.add(currentNode)
19+
currentNode = currentNode.next
20+
}
21+
22+
23+
for (i in stack.size - 1 downTo 1) {
24+
stack[i].next = stack[i-1]
25+
}
26+
stack[0].next = null
27+
return stack[stack.size -1]
28+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package leetcode_study
2+
3+
/*
4+
* board์—์„œ 0์ด ๋ฐœ๊ฒฌ ๋˜์—ˆ์„ ๋•Œ, ๊ธฐ์ค€ row, column์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฌธ์ œ
5+
* Set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ค‘๋ณต์„ ์—†์• ๊ณ  ์ˆœํšŒํ•˜์—ฌ ๋ฌธ์ œ ํ•ด๊ฒฐ
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2) (์ •ํ™•ํžˆ๋Š” O(row * col))
7+
* -> board์˜ row, col์„ ์ˆœํšŒํ•ด 0์„ ์ฐพ๋Š” ๊ณผ์ •
8+
* -> set์œผ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ row์„ ์ˆœํšŒํ•ด board์˜ ๊ฐ’์„ 0์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •
9+
* -> set์œผ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ column์„ ์ˆœํšŒํ•ด board์˜ ๊ฐ’์„ 0์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •
10+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
11+
* -> ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ rowSet, columnSet์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
12+
* */
13+
fun setZeroes(matrix: Array<IntArray>): Unit {
14+
val rowSet = mutableSetOf<Int>()
15+
val colSet = mutableSetOf<Int>()
16+
17+
val rowSize = matrix.size
18+
val colSize = matrix[0].size
19+
20+
// find row col
21+
for (row in matrix.indices) {
22+
for (col in matrix[0].indices) {
23+
if (matrix[row][col] == 0) {
24+
rowSet.add(row)
25+
colSet.add(col)
26+
}
27+
}
28+
}
29+
30+
if (rowSet.size == 0 && colSet.size == 0) return
31+
32+
for (row in rowSet) {
33+
for (index in IntRange(0, colSize - 1)) {
34+
matrix[row][index] = 0
35+
}
36+
}
37+
38+
for (col in colSet) {
39+
for(index in IntRange(0, rowSize - 1)) {
40+
matrix[index][col] = 0
41+
}
42+
}
43+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package leetcode_study
2+
3+
/*
4+
* ์ฃผ์–ด์ง„ m,n size board ์œ„์—์„œ ์ขŒ์ธก ์œ„๋ถ€ํ„ฐ ์šฐ์ธก ์•„๋ž˜๊นŒ์ง€ ๋„์ฐฉํ•˜๋Š” Unique path์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• (m = row size, n = col size)
5+
* ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์ด ์•„๋ž˜์™€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ •ํ•ด์ € ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๋‹ค์Œ ์นธ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Œ
6+
* board[i][j] = board[i][j-1] + board[i-1][j]
7+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(mn)
8+
* -> board๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ unique path๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •
9+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(mn)
10+
* -> m, n์„ ์‚ฌ์šฉํ•ด board๋ฅผ ๊ตฌ์„ฑ
11+
* */
12+
fun uniquePaths(m: Int, n: Int): Int {
13+
val board = Array(m) { IntArray(n) { 0 } }
14+
15+
for (i in IntRange(0, m-1)) {
16+
board[i][0] = 1
17+
}
18+
for (i in IntRange(0, n-1)) {
19+
board[0][i] = 1
20+
}
21+
22+
for (i in 1 until m) {
23+
for (j in 1 until n) {
24+
board[i][j] = board[i][j-1] + board[i-1][j]
25+
}
26+
}
27+
28+
return board[m-1][n-1]
29+
}

0 commit comments

Comments
ย (0)