문제 링크입니다: 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 |