๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ | Kotlin/๐Ÿค– | ์•Œ๊ณ ๋ฆฌ์ฆ˜

[Kotlin] ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

by immgga 2022. 10. 21.

์ด์ง„ ํƒ์ƒ‰์ด๋ž€?

  • ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„ ๊ฐ’์„ ์ด์šฉํ•ด ๊ฒ€์ƒ‰ ๊ฐ’์„ ์ค„์—ฌ ๊ฐ€๋ฉด์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

ํƒ์ƒ‰ ๊ณผ์ •

์ถœ์ฒ˜: ๋‚˜๋ฌด์œ„ํ‚ค

  1. ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  2. ์ฐพ๋Š” ์ˆ˜๊ฐ€ ์ค‘๊ฐ„๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ, ์ž‘์œผ๋ฉด ์™ผ์ชฝ์œผ๋กœ ๊ฒ€์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ขํžŒ๋‹ค.
  3. 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)
    }
}

 


๊ณผ์ •

  1. ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ์ •ํ•œ๋‹ค.
  2. repeat ๋ฌธ์„ ์ด์šฉํ•ด ๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
  3. ํƒ์ƒ‰ํ•  ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  4. ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.
  5. ์ฐพ๋Š” ๊ฐ’์ด ํฌ๋ฉด last index๋ฅผ mid-1 ๋กœ ์ ์šฉํ•ด ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ œํ•œํ•˜๊ณ , ์ž‘์€ ๊ฒฝ์šฐ first index๋ฅผ min+1๋กœ ์ ์šฉํ•ด ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ œํ•œํ•œ๋‹ค.
  6. 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

728x90

๋Œ“๊ธ€