백준 물병
처음에 그림을 그려보고 2의 제곱수가 무조건 1개로 합쳐진다는걸 생각했고 K가 1보다 클때는 2로 나눠지지 않을때마다 카운트 하면서 카운트 값이 K보다 크다면 N에 +1을 하면서 카운트값이 K보다 작아질때까지 반복했습니다.
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int add = 0;
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
while (true) {
int bottle = n + add;
int c = 0;
while (bottle > 0) {
if (bottle % 2 != 0) {
c++;
}
bottle /= 2;
}
if (c <= k) {
break;
}
add++;
}
System.out.println(add);
}
다른분들의 코드를 찾아봤을때 이진법으로 사용한 코드가 인상깊었습니다.
K개의 물병을 만든다는 것은 곧 물병의 총 개수를 이진수로 변환했을 때의 1의 개수와 동일하다는 것도 알 수 있습니다.
따라서, N보다 큰 수 중, 이진수로 변환했을 때의 1의 개수가 K 이하인 수를 찾아 출력하면 됩니다.
Author And Source
이 문제에 관하여(백준 물병), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@taehyun_96/백준-물병저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)