[BOJ] 1094 막대기

GirlFriend-Yerin·2020년 8월 26일
0

알고리즘

목록 보기
28/131

Note

자르고 붙이고 자르고 붙이고 반복문을 통해 구현을 하는 내용이다.
라고 생각할 수도 있지만 위 문제의 분류에는 수학이 포함되어있다.

문제 설명대로 풀면 합을 계산하고 현재 가장 작은 막대기를 계산하고 해야 하지만
위 문제는 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;
}

2019-01-10 10:00:00에 Tistory에서 작성되었습니다.

profile
개발할때 가장 행복한 개발자입니다.

0개의 댓글