하루 종일 걸렸다..
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)