[백준] 게임 (1072)(kotlin)

문제 설명

백준 1072번 문제 링크

입력 및 출력

» 입력

각 줄에 정수 X와 Y가 주어진다.

» 출력

첫째 줄에 형택이가 게임을 최소 몇 판 더 해야하는지 출력한다. 만약 Z가 절대 변하지 않는다면 -1을 출력한다.

제한 사항

1 ≤ X ≤ 1,000,000,000 0 ≤ Y ≤ X

예제 입출력(테스트케이스)

입력 출력
10 8 1
100 80 6
47 47 -1
99000 0 1000
1000000000 470000000 19230770

문제 풀이1

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val (x, y) = readLine().split(" ").map { it.toLong() }
    val z = 100 * y / x

    if (z >= 99L) {
        println(-1)
        return
    }

    val l1 = x * z + x - 100L * y
    val l2 = 99L - z

    if (l1 % l2 != 0L)
        println(l1 / l2 + 1L)
    else
        println(l1 / l2)
}

문제 풀이2 (BST)

var x = 0L
var y = 0L
var z = 0L

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    readLine().split(" ").also {
        x = it[0].toLong()
        y = it[1].toLong()
    }

    z = 100 * y / x

    if (z >= 99L) {
        println(-1)
        return
    } else {
        println(binarySearch(0, x))
    }
}


fun binarySearch(l: Long, r: Long): Long {
    var left = l
    var right = r

    while (left <= right) {
        val mid = (left + right) / 2
        val perc = ((mid + y) * 100) / (x + mid)

        if (perc != z) right = mid - 1
        else left = mid + 1
    }

    return left
}