fun main() {
val bufferedReader = System.`in`.bufferedReader()
val bufferedWriter = System.out.bufferedWriter()
val (n, k) = bufferedReader
.readLine()
.split(" ")
.map { it.toInt() }
var minimumNeededBall = 0
for (i in 1..k) { // ◀ 최소 1 + 2 + 3 +... 개의 공을 가져야 합니다.
minimumNeededBall += i
}
if (n < minimumNeededBall) {
bufferedWriter.write("-1")
} else {
// 남은 공이 k로 나누어 떨어진다는 의미는 연속된 수의 공이 바구니에 순차적으로
// 들어가 있다는 의미입니다. 즉, 예를 들어 1, 2, 3의 공이 바구니에
// 들어가 있다면 3 - 1 = 2 이므로 (바구니 개수 - 1)이 정답이 됩니다.
// 남은 공이 1개 이상이라는 의미는 연속된 수의 공이 바구니에 순차적으로
// 들어가 있고, 남은 공을 공이 많이 든 바구니 순서대로 1개씩 넣어주면
// 가장 많은 공이 든 바구니의 공은 기껏해야 1개만 증가하기 때문에
// (바구니 개수 - 1 + 1)이 되어 바구니 개수가 정답이 됩니다.
val remainBall = n - minimumNeededBall
if (remainBall % k > 0) bufferedWriter.write("$k")
else bufferedWriter.write("${k - 1}")
}
bufferedReader.close()
bufferedWriter.close()
}
(이번 문제의 풀이는 생각보다 이해하는데 어려움이 있어서 주석을 추가해두었습니다.)