N=13
, k=2
로 일단 문제 그대로 따라해봤다.초기 상태
1번 재분배 후
2번 재분배 후
3번 재분배 후
1101
, 즉 13을 이진수로 표현한 값이다.물병 1개째 추가 & 재분배
1110
, 14가 되었다.물병 2개째 추가 & 재분배 안됨
1111
, 15가 되었다.물병 3개째 추가 & 재분배
10000
, 16이 되었다.N
을 이진수로 변환했을 때 1의 개수가 비어있지 않은 물병의 개수다.N
을 1씩 증가시켜 이진수로 변환했을 때 1의 개수와 k
를 비교해 k
가 작아질 때까지 반복한다.bitCount()
라는 간편한 메서드가 존재한다.O(log N)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ_1052 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int count = 0;
while (Integer.bitCount(n) > k) {
n++;
count++;
}
System.out.println(count);
}
}