2024. 4. 19. 17:36, ๐กAlgorithm
๋ฐ์ํ
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/147355
์ฑ๊ณต ์ฝ๋
class Solution {
fun solution(t: String, p: String): Int {
var count = 0
// p์ ๊ธธ์ด ๋งํผ, t์ ๋ฌธ์์ด์ ๋ฝ์์ ๋น๊ต
for (i in 0 .. t.length - p.length){
val substring = t.substring(i, i + p.length) // i๋ถํฐ ์์ํ์ฌ i + p.length ์ ๊น์ง ๋ฌธ์์ด ์๋ฅด๊ธฐ
if(substring.toLong() <= p.toLong()){
count++
}
}
return count
}
}
์ค๋ช
- p์ ๊ธธ์ด๋งํผ t์ ๋ฌธ์์ด์ ๋ฝ์์ ๋น๊ตํ๊ธฐ ์ํด for๋ฌธ์ ๋ง๋ ๋ค.
for๋ฌธ์ 0๋ถํฐ (์ด ๊ธธ์ด - p์ ๊ธธ์ด)๋งํผ ๋ฐ๋ณตํ๋ค.
(substring(i, i + p.length)๋ฅผ ์ํํ๊ธฐ ์ํด ์ด๋ ๊ฒ ๋ฒ์๋ฅผ ์ค์ ) - ๋ฝ์๋ธ ๋ฌธ์์ด๋ง๋ค p์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ค.
p๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด count๋ฅผ ํ๋์ฉ ๋๋ฆฐ๋ค. - ๋ชจ๋ ๋น๊ต๋ฅผ ์๋ฃํ๋ฉด count๋ฅผ ๋ฆฌํดํ๋ค.
๐ก substring()
val str = "Hello, world!"
val result1 = str.substring(7) // "world!"
val result2 = str.substring(7, 12) // "world"
val result3 = str.substring(7..11) // "world"
- ๋ฌธ์์ด์์ ํน์ ๋ถ๋ถ ๋ฌธ์์ด์ ์ถ์ถํ๋๋ฐ ์ฌ์ฉํ๋ ๋ฉ์๋
- substring(startIndex: Int): String: ์์ ์ธ๋ฑ์ค๋ถํฐ ๋ฌธ์์ด์ ๋๊น์ง ์ถ์ถ
- substring(startIndex: Int, endIndex: Int): String: ์์ ์ธ๋ฑ์ค๋ถํฐ ๋ ์ธ๋ฑ์ค๊น์ง ์ถ์ถ
- substring(range: IntRange): String: ์ง์ ๋ ๋ฒ์์ ํด๋นํ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ถ์ถ
๋ค๋ฅธ ๋ฐฉ๋ฒ
class Solution {
fun solution(t: String, p: String): Int {
return (0..t.length - p.length)
.map{ t.substring(it until it + p.length) }
.count { it <= p }
}
}
- map์ ์ด์ฉํ์ฌ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐ๋ก ๋ฐํํ์ฌ count๋ฅผ ์ธ์ ๊ฐ๋จํ๊ฒ ์ฝ๋๋ฅผ ์ค์ธ ํ์ด๋ค.
๐กmap
val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers) // ์ถ๋ ฅ: [1, 4, 9, 16, 25]
- ๊ฐ ์์๋ฅผ ์ฃผ์ด์ง ๋๋ค ํจ์์ ์ ์ฉํ์ฌ ์๋ก์ด ์ปฌ๋ ์ ์ ์์ฑํ๋ค.
- ๊ธฐ์กด ์ปฌ๋ ์ ์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ๋๋ค ํจ์๊ฐ ์ ์ฉ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ์๋ก์ด ์ปฌ๋ ์ ์ ๋ฐํํ๋ค.
class Solution {
fun solution(t: String, p: String): Int =
t.windowed(p.length).count {
it.toLong() <= p.toLong()
}
}
- windowed()๋ฅผ ์ด์ฉํ ํ์ด๋ค. ์๋์ฐ์ ์ฌ์ด์ฆ๋ง p.length๋ก ์ค์ ๋์ด step์ ๊ธฐ๋ณธ๊ฐ์ธ 1๋ก ์ค์ ๋์๋ค.
๐กwindowed()
fun <T> Iterable<T>.windowed(
size: Int,
step: Int = 1,
partialWindows: Boolean = false
): List<List<T>>
val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
// ์๋์ฐ ํฌ๊ธฐ๊ฐ 3์ด๊ณ , ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ๊ฒฝ์ฐ
val result1 = list.windowed(size = 3, step = 1)
// ๊ฒฐ๊ณผ: [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]
// ์๋์ฐ ํฌ๊ธฐ๊ฐ 4์ด๊ณ , ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ 2์ธ ๊ฒฝ์ฐ
val result2 = list.windowed(size = 4, step = 2)
// ๊ฒฐ๊ณผ: [[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8], [7, 8, 9, 10]]
// ์๋์ฐ ํฌ๊ธฐ๊ฐ 2์ด๊ณ , ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ 3์ธ ๊ฒฝ์ฐ
val result3 = list.windowed(size = 2, step = 3)
// ๊ฒฐ๊ณผ: [[1, 2], [4, 5], [7, 8], [10]]
// ๋ถ๋ถ ์๋์ฐ ํฌํจ
val result4 = list.windowed(size = 3, step = 2, partialWindows = true)
// ๊ฒฐ๊ณผ: [[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9], [9, 10]]
// ์๋์ฐ ํฌ๊ธฐ๋ง ์ค์ , ์ด๋ ๊ฑฐ๋ฆฌ๋ ๊ธฐ๋ณธ 1๋ก ์ค์ ๋จ
val result5 = list.windowed(3)
// ๊ฒฐ๊ณผ : [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]
- ์ฃผ์ด์ง ํฌ๊ธฐ์ ์ฐฝ์ ์ด๋ํ๋ฉด์ ์ปฌ๋ ์ ์ ๋ถํ ํ๋๋ฐ ์ฌ์ฉ
- ๋ฐํ ๊ฐ์ ์ฃผ์ด์ง ํฌ๊ธฐ์ ๋ถ๋ถ ์ปฌ๋ ์ ๋๋ ์๋์ฐ
- size: ์์ฑํ ๊ฐ ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๊ฐ
- step: ์๋์ฐ๋ฅผ ์ด๋์ํค๋ ๊ฐ๊ฒฉ์ ๋ํ๋ด๋ ๊ฐ. ๊ธฐ๋ณธ๊ฐ์ 1์ด๋ฉฐ, ์ด๋ ํ ๋ฒ์ ํ ์์์ฉ ์ด๋ํจ์ ์๋ฏธ
- partialWindows: ๋ง์ง๋ง ๋ถ๋ถ ์๋์ฐ์ ํฌ๊ธฐ๊ฐ size๋ณด๋ค ์์ ๋, ์ด ๋ถ๋ถ ์๋์ฐ๋ฅผ ํฌํจํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ถ๋ฆฌ์ธ ๊ฐ. ๊ธฐ๋ณธ๊ฐ์ false์ด๋ฉฐ, ์ด ๊ฒฝ์ฐ ๋ถ๋ถ ์๋์ฐ๋ ํฌํจ๋์ง ์์
์ ํํ ๊ธฐ์ต์ ์๋์ง๋ง, ์ด ์ด์ธ์๋ ํ์๋ถ์ด ๊ณต์ ํด์ฃผ์ ์ฝ๋ ์ค์ chucked๋ฅผ ์ด์ฉํ์ ์ฝ๋๊ฐ ์์๋ค.
๊ฒฐ๊ตญ์ ์คํธ๋ง ๊ฐ์ผ๋ก p์ ๋น๊ตํ๊ฒ ๋๋ฉด์ toInt()๋ toLong()๊ณผ ๊ฐ์ ํ๋ณํ์ ์ ๊ฒฝ์ธ ํ์๊ฐ ์๋ ์ฝ๋์๋ค.
๋ฐ์ํ
๐ฌ C O M M E N T