[백준] 게임 (1072)(kotlin)
문제 설명
입력 및 출력
» 입력
각 줄에 정수 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
}