Link https://www.acmicpc.net/problem/1094
소스결과 1984 KB / 0 ms
출처 Backjoon
언어 C++ 17
분류 수학, 시뮬레이션(Simulation)
연관검색어 백준 1094, BOJ 1094 C++, C++ 1094
설명
자르고 붙이고 자르고 붙이고 반복문을 통해 구현을 하는 내용이다.
라고 생각할 수도 있지만 위 문제의 분류에는 수학이 포함되어있다.
문제 설명대로 풀면 합을 계산하고 현재 가장 작은 막대기를 계산하고 해야 하지만
위 문제는 2진법에 관한 문제이다.
23의 경우 2진법으로는 16 + 4 + 2 + 1의 합으로 10111 이고 여기서 1의 개수는 4개이다
64나 32 같은 경우는 1000000 과 100000 이므로 1의 개수는 1이다.
따라서 목표값 X를 2진수로 바꾸고 1의 개수를 세면 된다.
알고리즘
1. 입력값 x를 2진수로 변환하면서 1의 개수를 센다.
소스코드
#include <iostream>
using namespace std;
int main()
{
int target;
int count = 0;
cin >> target;
for (;target != 0; target >>= 1 )
if (target % 2)
count++;
cout << count;
return 0;
}
'Algorithm > Mathematics' 카테고리의 다른 글
BaekJoon 1652 누울 자리를 찾아라 (0) | 2019.01.21 |
---|---|
BackJoon 1978 소수 찾기 (0) | 2019.01.21 |
BaekJoon 2869 달팽이는 올라가고싶다. (0) | 2019.01.05 |
BaekJoon 1110 더하기 사이클 (0) | 2019.01.05 |
BaekJoon 2839 설탕배달 (0) | 2019.01.05 |