본문 바로가기

Algorithm/Mathematics

BaekJoon 1094 막대기

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