티스토리 뷰

PS

백준 1052. 물병

tose33 2021. 8. 22. 10:21

https://www.acmicpc.net/problem/1052

 

1052번: 물병

지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번

www.acmicpc.net

 

이 문제는 처음에 k=1일 경우가 아니면 (2 <= k < n) 무조건 물통을 하나도 사지않고 옮길수 있다고 생각했다.

또한 n이 2의n승이라면 하나의 물병으로 합칠수 있으므로 k가 1이 아니라면 그냥 k보다 큰 2의n승의 숫자가 될때까지 물통을 사면된다고 생각했는데 답이 아니었다.

 

 

#include <iostream>
using namespace std;

int n,k;

int main()
{
    cin >> n >> k;

    // n이 k보다 작으면 그냥 0 출력후 종료
    if(n <= k)
    {
        cout << 0;
        return 0;
    }

    int ans = 0;
    while(true)
    {
        int cnt = 0;
        int temp = n;

        while(temp)
        {
            // 남는 물병이 있음 (합쳐지지 않은 물병)
            if(temp % 2)
                cnt++;

            temp /= 2;
        }

        if(cnt <= k)
            break;

        n++;
        ans++;
    }

    cout << ans;

}

'PS' 카테고리의 다른 글

백준 13413. 오셀로 재배치  (0) 2021.08.23
백준 19939. 박 터뜨리기  (0) 2021.08.23
백준 11508. 2+1 세일  (0) 2021.08.20
백준 2138. 전구와 스위치  (0) 2021.08.20
백준 16435. 스네이크버드  (0) 2021.08.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함