문제
풀이
이분 탐색을 이용해 필요한 경기 수를 구할 수 있다.
이분 탐색은 주어진 범위에서 중간 값을 선택하고, 그 값이 원하는 조건을 만족하는지에 따라 탐색 범위를 좁혀가는 방식이다. 이 문제에서는 승률을 계산하여 승률이 언제 변하는지 확인하고, 그에 따라 탐색 범위를 조절하면 된다.
승률 계산에서 소수점은 버려야하기때문에 승률은 floor(100*win/match) 으로 계산한다. 이분 탐색은 입력받은 경기 수까지의 범위에서 실행하면 된다.
코드
import kotlin.math.*
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val (match, win) = br.readLine().split(' ').map { it.toDouble() }
val rate = getRate(match, win)
var ans = -1
var left = 0
var right = match.toInt()
while (left <= right) {
val mid = (left+right)/2
if(getRate(match + mid, win + mid) != rate) {
ans = mid
right = mid - 1
} else {
left = mid + 1
}
}
bw.write("$ans")
bw.flush()
bw.close()
br.close()
}
fun getRate(match: Double, win: Double) = floor(100 * win/match)
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 1965번: 상자넣기 - Kotlin[코틀린] (0) | 2023.12.20 |
---|---|
[백준] 10451번: 순열 사이클 - Kotlin[코틀린] (0) | 2023.12.19 |
[백준] 1213번: 팰린드롬 만들기 - Kotlin[코틀린] (0) | 2023.12.18 |
[백준] 1449번: 수리공 항승 - Kotlin[코틀린] (0) | 2023.12.17 |
[백준] 13023번: ABCDE - Kotlin[코틀린] (0) | 2023.12.16 |