알고리즘/BOJ

백준 1094번 막대기

꾸준함. 2018. 5. 5. 17:59

문제 링크입니다: https://www.acmicpc.net/problem/1094


결국 문제에서 요구하는 것은 주어진 X를 이진수로 변환했을 때 1의 개수였습니다.

따라서 이진수로 변환 후 1의 갯수를 세면 쉽게 풀 수 있는 문제였습니다.


#include <iostream>

#include <cmath>

using namespace std;

 

int X;

 

int numOfDivide(void)

{

        int N = 64;

        int result = 0;

        int idx = 0;

        //이진수로 변환

        while (X)

        {

                 if (N > X) //N X보다 큰 경우 N 2로 나누고 승수를 낮춘다

                 {

                         N /= 2;

                         idx++;

                         continue;

                 }

                 result++; //2 (6-idx)승이 1인 경우 센다

                 X -= pow(2.0, 6 - idx);

        }

        return result;

}

 

int main(void)

{

        cin >> X;

 

        cout << numOfDivide() << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1038번 감소하는 수  (2) 2018.05.05
백준 2010번 플러그  (0) 2018.05.05
백준 1475번 방 번호  (0) 2018.05.05
백준 1037번 약수  (2) 2018.05.04
백준 1004번 어린 왕자  (0) 2018.05.01