https://www.acmicpc.net/problem/1052
문제
풀이
n을 비트로 나타내어 1의 개수가 하나의 병이라고 보면 됩니다.
만약 13이라고 한다면,
1101 이니 3개의 병에 담겨 있겠죠. k=2 이므로 1의 개수가 2 이하이어야 합니다.
n을 1씩 더하여 비트 1의 개수가 k보다 작거나 같다면 수행을 중지시켜서 cnt를 알아냅니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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 = solution(n, k);
System.out.println(ans);
}
public static int solution(int n, int k) {
int ans = 0;
while(Integer.bitCount(n) > k) {
n ++;
ans ++;
}
return ans;
}
}
https://github.com/kwakminjung/BOJ/commit/b26366532054ec06098bf492f04ae8a674530277
✨feat: [골드5] 물병 1052번 : 수학, 그리디 알고리즘, 비트마스킹 · kwakminjung/BOJ@b263665
백준 1052번 : 물병 (골드5) 알고리즘 분류 : 수학, 그리디 알고리즘, 비트마스킹 풀이 : https://cuckoobird.tistory.com/208 결과 : 맞았습니다 (메모리 14308KB | 시간 108ms)
github.com
회고
-1 예외 처리를 안 했는데 맞는 걸 보면 예외적인 경우가 없는 걸까요? 나중에 재체점 될 것 같기도..
'코딩테스트' 카테고리의 다른 글
[프로그래머스] Lv2. 타겟 넘버 - Java (0) | 2024.09.12 |
---|---|
[백준] 2212번 '센서' - Java (4) | 2024.09.06 |
[백준] 1111번 'IQ TEST' - Java (0) | 2024.08.26 |
[프로그래머스] Lv1. 이웃한 칸 - Java (0) | 2024.08.24 |
[백준] 1325번 '효율적인 해킹' - Java (0) | 2024.08.22 |