_우지 2021. 7. 10. 19:06

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
fun binary_search(arr:List<Int>, find: Int, start: Int, end: Int): Int {
    if(start>end) {
        return -1
    }
    val mid = (start+end)/2
    if(arr[mid]==find){
        return mid
    }
    else if(arr[mid]>find){
        return binary_search(arr,find,start,mid-1)
    }
    else{
        return binary_search(arr,find,mid+1,end)
    }
}
 
fun main(){
    val (num , find)= readLine()!!.split(" ").map{it.toInt()}
    val arr = readLine()!!.split(" ").map{it.toInt()}
 
    val result = binary_search(arr,find,0,num-1)
 
    if(result==-1)
        println("원소가 존재하지 않습니다.")
    else{
        println(result+1)
    }
}
cs

반복문 버전.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
 
fun binary_search(arr:List<Int>, find: Int, start: Int, end: Int): Int {
    var end = end
    var start = start
    var mid = start + end /2
    while(start<=end){
        mid = start + end /2
        if(arr[mid]==find){
            return mid
        }
        else if(arr[mid]>find){
            end = mid-1
        }
        else{
            start = mid+1
        }
    }
    return -1
}
 
fun main(){
    val (num , find)= readLine()!!.split(" ").map{it.toInt()}
    val arr = readLine()!!.split(" ").map{it.toInt()}
 
    val result = binary_search(arr,find,0,num-1)
 
    if(result==-1)
        println("원소가 존재하지 않습니다.")
    else{
        println(result+1)
    }
 
}
cs

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
 
fun binary_search(arr:List<Int>, num:Int, find: Int, start: Int, end: Int): Int {
    var end = end
    var start = start
    var mid = (start + end) /2
    var total = 0
    while(start<=end){
 
        total=0
        mid = (start + end) /2
        for(i in 0 until num){
            if(arr[i]-mid>0)
                total+=(arr[i]-mid)
        }
        //println("start: $start, end: $end, mid: $mid total: $total")
        //println(mid)
        if(total==find){
            return mid
        }
        else if(total>find){
            start = mid+1
        }
        else{
            end = mid-1
        }
    }
    return mid
}
 
fun main(){
    val (num , want)= readLine()!!.split(" ").map{it.toInt()}
    val arr = readLine()!!.split(" ").map{it.toInt()}
    val end = arr.maxByOrNull { it }!!.toInt()
    println(end)
    val result = binary_search(arr,num,want,0,end)
 
 
    println(result)
 
 
}
cs