Skip to content

Commit 18b2713

Browse files
authored
Merge pull request #992 from EcoFriendlyAppleSu/main
[์นœํ™˜๊ฒฝ์‚ฌ๊ณผ] week9
2 parents baf26d9 + 031db5d commit 18b2713

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package leetcode_study
2+
3+
/*
4+
* ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์—์„œ ์ˆœํ™˜์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฌธ์ œ
5+
* Node `val` ๊ฐ’์„ ์ฃผ์–ด์ง„ ๋ฒ”์œ„ (-10,000 <= `val` <= 10,000) ๋ณด๋‹ค ํฐ ์ •์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด cycle ํŒ๋ณ„ ์‹œ๋„
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
7+
* -> linked list node ๊ฐœ์ˆ˜๋งŒํผ ์ง„ํ–‰
8+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
9+
* -> ์ฃผ์–ด์ง„ node๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” currentNode ์ด์™ธ์— ์ถ”๊ฐ€๋˜๋Š” ์—†์Œ
10+
* */
11+
fun hasCycle(head: ListNode?): Boolean {
12+
var currentNode = head
13+
14+
while (currentNode?.next != null) {
15+
if (currentNode.`val` == 10001) return true // ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ด๋ฉด ์‚ฌ์ดํด ์กด์žฌ
16+
currentNode.`val` = 10001 // ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ ํ‘œ์‹œ
17+
currentNode = currentNode.next // ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™
18+
}
19+
20+
return false // `null`์„ ๋งŒ๋‚ฌ๋‹ค๋ฉด ์‚ฌ์ดํด ์—†์Œ
21+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package leetcode_study
2+
3+
/*
4+
* ๊ฐ€์žฅ ๊ธด ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
5+
* ๋™์  ๊ณ„ํš๋ฒ•์„ ์‚ฌ์šฉํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ
6+
* ๋ฌธ์ž๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ, table[i][j] = table[i-1][j-1] + 1. ์ฆ‰, ์ด์ „๊นŒ์ง€์˜ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๊ธธ์ด์— 1์„ ์ถ”๊ฐ€
7+
* ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ, table[i][j] = max(table[i-1][j], table[i][j-1]) ์ด๋Š” ํ˜„์žฌ๊นŒ์ง€ ์ฐพ์€ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ณผ์ •
8+
*
9+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2)
10+
* -> ๋‘ ๋ถ„์ž์—ด์„ ์ด์ค‘ ๋ฐ˜๋ณต์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(nm) (= n๊ณผ m์€ ๊ฐ๊ฐ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ๊ธธ์ด)
12+
* -> dp table์— ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„
13+
* */
14+
fun longestCommonSubsequence(text1: String, text2: String): Int {
15+
val n = text1.length
16+
val m = text2.length
17+
val dp = Array(n + 1) { IntArray(m + 1) }
18+
19+
for (i in 1..n) {
20+
for (j in 1..m) {
21+
if (text1[i - 1] == text2[j - 1]) {
22+
dp[i][j] = dp[i - 1][j - 1] + 1
23+
} else {
24+
dp[i][j] = maxOf(dp[i - 1][j], dp[i][j - 1])
25+
}
26+
}
27+
}
28+
return dp[n][m]
29+
}
30+
31+
/*
32+
* ์ฃผ์–ด์ง„ ๋‘ ๋ฌธ์ž์—ด์— ๊ฐ๊ฐ์˜ Index๋ฅผ ๋‘์–ด ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ํ•ด๊ฒฐ ์‹œ๋„ ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๋„
33+
* Test case๋ฅผ ํ†ต๊ณผํ–ˆ์ง€๋งŒ "bac", "abc"์™€ ๊ฐ™์€ case์—์„œ "bc"๋ฅผ ๋‹ต์œผ๋กœ ๋„์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ "ac"์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ง€๋‚˜์น˜๊ฒŒ๋จ
34+
* ์ฆ‰, ์ •๋‹ต์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Œ.
35+
* */
36+
fun longestCommonSubsequence(text1: String, text2: String): Int {
37+
var result = 0
38+
var longOne: String
39+
var shortOne: String
40+
var longIndex = 0
41+
var shortIndex = 0
42+
43+
if (text1.length >= text2.length) {
44+
longOne = text1
45+
shortOne = text2
46+
} else {
47+
longOne = text2
48+
shortOne = text1
49+
}
50+
51+
while (shortIndex < shortOne.length) {
52+
if (shortOne[shortIndex] == longOne[longIndex]) {
53+
shortIndex += 1
54+
longIndex += 1
55+
result += 1
56+
} else {
57+
longIndex += 1
58+
}
59+
if (longIndex == longOne.length) break
60+
}
61+
62+
return result
63+
}

0 commit comments

Comments
ย (0)