반응형
https://www.acmicpc.net/problem/1052
1052번: 물병
지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번
www.acmicpc.net
풀이
문제를 보자마자 '2'로 무언가를 해야한다는 걸 알았다.
하지만 쉽게 찾을 수가 없었고 이것저것 해보다가 2진수를 발견했다.
우선 숫자 N을 Integer.toBinaryString(N)을 이용해서 2진수로 변경해주면 된다.
String binary = Integer.toBinaryString(N);
이 문제의 핵심은 2진수로 변경된 숫자 '1'의 개수를 보면 된다.
예제 2번에서 숫자 N(13)을 2진수로 변경했을 때 1101이 나온다.
여기서 '1'의 개수는 K(2)보다 많기 때문에 N+1을 해주면서 숫자 '1'의 개수가 K보다 같거나 작을 때까지 돌리면 된다.
1101 (13) → 3개
1110 (14) → 3개
1111 (15) → 4개
10000 (16) → 1개
'1'의 개수가 K인 2보다 작거나 같은 경우는 숫자 N에서 3을 더했을 경우로 정답은 3이 된다.
<최종코드>
import java.io.*;
import java.util.*;
public class Main {
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 ans = 0;
while (true) {
int cnt = 0;
String binary = Integer.toBinaryString(N); // 2진수로 변경
// '1'의 개수 count
for (int i=0; i<binary.length(); i++) {
if (binary.charAt(i) - '0' == 1) cnt++;
}
if (cnt <= K) {
System.out.println(ans);
break;
} else {
N++;
ans++;
}
}
}
}
반응형
'알고리즘 > 구현 & 그리디 & 브루트포스' 카테고리의 다른 글
[백준]JAVA - 1202번: 보석 도둑 (0) | 2022.10.21 |
---|---|
[백준]JAVA - 11399번: ATM (0) | 2022.10.20 |
[백준]JAVA - 1002번: 터렛 (0) | 2022.09.28 |
[백준]JAVA - 1652번: 누울 자리를 찾아라 (0) | 2022.09.26 |
[백준]JAVA - 1085번: 직사각형에서 탈출 (0) | 2022.09.26 |