백준 1052번 물병 (C++)

안유태·2023년 11월 28일
0

알고리즘

목록 보기
190/239

1052번: 물병

그리디를 이용한 문제이다. 같은 양의 물이 들어있는 물병끼리는 하나로 합칠 수 있다. 그렇기에 N을 2로 나누어가다보면 최종적으로 남는 물이 들어있는 물병의 개수를 알 수 있다. 만약 개수가 K 이하라면 물병을 추가로 구매할 필요가 없다. 코드는 반복문을 통해 이를 반복하면서 추가로 구매한 물병의 개수를 세어 이를 출력해주었다. 어렵지 않게 풀 수 있었던 문제였다.



#include <iostream>

using namespace std;

int N, K, result = 0;

void solution() {
    while (1) {
        int count = 0;
        int tmp = N + result;

        while (tmp > 0) {
            if (tmp % 2 == 0) {
                tmp /= 2;
            }
            else {
                tmp /= 2;
                count++;
            }
        }

        if (K >= count) break;

        result++;
    }

    cout << result;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    cin >> N >> K;

    solution();

    return 0;
}
profile
공부하는 개발자

0개의 댓글