Programming/Kotlin

[백준/Kotlin] 물병(1052)

코딩뽀시래기 2024. 5. 10. 17:49
728x90

https://www.acmicpc.net/problem/1052

 

  • N을 2로 계속 나누는 과정에서 나머지 1이 나오는 경우의 수 = 최종 물이 채워져있는 물병의 개수
  • = N을 이진수로 바꿨을 때 1의 개수
// 백준 - 물병(1052)
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.StringTokenizer

fun main() {
  val br = BufferedReader(InputStreamReader(System.`in`))
  var st = StringTokenizer(br.readLine())

  var N = st.nextToken().toInt()
  val K = st.nextToken().toInt()

  // N을 2로 계속 나눴을 때, 그 과정에서 나머지 1이 생기는 수 => 최종 물이 채워져있는 물병의 개수
  // 위의 수는 N을 이진수로 바꿨을 때 1의 개수를 세어보는 것과 같음
  var answer = 0

  // K개 이하로 만들어질 때까지 물병 구매
  while(Integer.bitCount(N) > K) {
    N++
    answer++
  }

  print(answer)
}
728x90