Algorithm/Mathematics
BaekJoon 1094 막대기
GirlFriend_Yerin
2019. 1. 10. 10:00
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;
}