백준 1094 : 막대기(C++)

Chanyang Im·2022년 5월 13일
0

BAEKJOON

목록 보기
7/13
post-thumbnail

문제

풀이

문제만 읽으면 어려워 보일 수 있지만
길이가 64인 막대를 자르면, 32, 16, 8, 4, 2, 1로 나눠집니다.(2^5, 2^4, 2^3,,,2의 제곱승)
길이가 X인 막대는 위 길이의 막대들의 조합으로 만들 수 있습니다.
이 말은, 2의 제곱승의 조합으로 X를 만들면 된다는 뜻이고 즉 이진수로 바꿔서 해당 자리 수가 1인 것의 개수를 세면 됩니다.

코드

#include <iostream>
#define endl "\n"
#define init ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;

int main() {
    init
    int X;
    cin >> X;

    int count = 0;
    while(X > 0) {
        if(X % 2) {
            count++;
        }
        X = X >> 1;
    }

    cout << count << endl;
    return 0;
}
profile
안녕하세요!! 세상에 관심이 많은 공학자입니다!😆

0개의 댓글