백준 13397 binary_search_swift

hankyulee·2021년 11월 30일
0

NeededToRetry

목록 보기
3/4

하루 종일 걸렸다..

import Foundation

var givenNM = readLine()!.split(separator: " ").map{Int(String($0))!}
var N = givenNM[0]
var M = givenNM[1]
var array = readLine()!.split(separator: " ").map{Int(String($0))!}

var start = 0
var end = array.max()! - 1

func countV(mid:Int)->Int{
    var minV = array[0]//1
    var maxV = array[0]//1
    var count = 0
    for n in array{ //[1 5 4 6 2 1 3 7]
        //print("1. mid, n :",mid,n)
        if n < minV { minV = n }
        if n > maxV { maxV = n }
        //print("2. max, min, mid", maxV,minV,mid)
        if maxV - minV <= mid {
            //print("if. maxV - minV <= mid")
            continue
        }
        else {
            //print("else. maxV - minV > mid")
            count += 1
            minV = n
            maxV = n
            print("else 결과: count,max,min",count,maxV,minV)
        }
    }
    //print("return count + 1 :\(count + 1 )")
    return count + 1
}
var result = 0
var k = 0
while(start <= end){//0,
    var mid = (end + start) / 2
    let count = countV(mid: mid)
    if count <= M {
        //print("@@@count <= M:\(count), \(M) ")
        result = mid
        end = mid - 1
        //print("start: \(start), end: mid - 1 \(end)")
    }
    else {
        //print("@@@count > M:\(count), \(M) ")
        start = mid + 1
        //print("start: mid+1 = \(start) , end : \(end)")
    }
    //print(start,end)
    

}
print(result)



0개의 댓글