์ด์ง ํ์์ด๋?
- ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ์ค๊ฐ ๊ฐ์ ์ด์ฉํด ๊ฒ์ ๊ฐ์ ์ค์ฌ ๊ฐ๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
ํ์ ๊ณผ์
- ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ์ค๊ฐ๊ฐ์ ์ฐพ๋๋ค.
- ์ฐพ๋ ์๊ฐ ์ค๊ฐ๊ฐ๋ณด๋ค ํฌ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก, ์์ผ๋ฉด ์ผ์ชฝ์ผ๋ก ๊ฒ์ ๋ฒ์๋ฅผ ์ขํ๋ค.
- 1, 2๋ฒ์ ๋ฐ๋ณตํ๋ค.
์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๊ทธ๋ฅ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ์ฐพ๋ ๊ฒ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ์ํ๋ ์ซ์๋ฅผ ์ฐพ์ ์ ์๋ค.
์์ ์ฝ๋
์ซ์์ ๋ฒ์์ ์ํ๋ ์ซ์๋ฅผ ์ ๋ ฅํ๊ณ ์ด์ง ํ์์ผ๋ก ๊ทธ ์ซ์๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
package algorithm
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() {
val bf = BufferedReader(InputStreamReader(System.`in`))
val arrayIndex = bf.readLine().toInt()
val array = IntArray(arrayIndex)
repeat(arrayIndex) {
array[it] = it+1
}
val searchData = bf.readLine().toInt()
println(binarySearch(array, searchData, 0, array.lastIndex))
}
fun binarySearch(array: IntArray, searchData: Int, low: Int, high: Int): Int {
// ๊ฐ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ
if (low > high) return -1
// ์ค์ ๊ฐ ๊ฒฐ์ ํ๊ธฐ
// val mid = low + (high - low)/2 ๋ฒ์๋ฅผ ๋์ด์๋ ๊ฒฝ์ฐ ๊ตฌํ
val mid = (high+low)/2
return if (array[mid] == searchData) {
array[mid]
} else if (array[mid] > searchData) { // ์ฐพ๋ ๊ฐ์ด ๋ฐ์ดํฐ๋ณด๋ค ํผ
binarySearch(array, searchData, low, mid-1)
} else { // ์ฐพ๋ ๊ฐ์ด ๋ฐ์ดํฐ๋ณด๋ค ์์
binarySearch(array, searchData, mid+1, high)
}
}
๊ณผ์
- ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ์ ํ๋ค.
- repeat ๋ฌธ์ ์ด์ฉํด ๋ฐฐ์ด์ ๊ฐ์ ๋ฃ๋๋ค.
- ํ์ํ ์ซ์๋ฅผ ์ ๋ ฅํ๋ค.
- ์ด์ง ํ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ค.
- ์ฐพ๋ ๊ฐ์ด ํฌ๋ฉด last index๋ฅผ mid-1 ๋ก ์ ์ฉํด ํ์ ๋ฒ์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ ํํ๊ณ , ์์ ๊ฒฝ์ฐ first index๋ฅผ min+1๋ก ์ ์ฉํด ํ์ ๋ฒ์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ํํ๋ค.
- 5๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํด ์ํ๋ ๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
์ฐ์ต ๋ฌธ์
https://www.acmicpc.net/problem/10815
10815๋ฒ: ์ซ์ ์นด๋
์ฒซ์งธ ์ค์ ์๊ทผ์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ซ์ ์นด๋์ ๊ฐ์ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์ซ์ ์นด๋์ ์ ํ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ซ์ ์นด๋์ ์ ํ์๋ ์๋ -10,000,000๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10,
www.acmicpc.net
https://www.acmicpc.net/problem/1920
1920๋ฒ: ์ ์ฐพ๊ธฐ
์ฒซ์งธ ์ค์ ์์ฐ์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ N๊ฐ์ ์ ์ A[1], A[2], …, A[N]์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M๊ฐ์ ์๋ค์ด ์ฃผ์ด์ง๋๋ฐ, ์ด ์๋ค
www.acmicpc.net
'๐ | Kotlin > ๐ค | ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋งค๋ด์ฒ ์๊ณ ๋ฆฌ์ฆ(Manacher) ๊ฐ๋ (0) | 2024.06.24 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ(DFS, BFS) (0) | 2024.06.22 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(Greedy Algorithm) (0) | 2024.06.18 |
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) (0) | 2024.06.12 |
[Kotlin] ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.10.24 |