https://programmers.co.kr/learn/courses/30/lessons/12911
#include <string>
#include <vector>
using namespace std;
int get_1_count(int n)
{
int cnt = 0;
while (n)
{
if (n % 2 == 1)
{
++cnt;
}
n /= 2;
}
return cnt;
}
int solution(int n) {
// input값이 2진수일때 1의 개수 구하기
int cnt = get_1_count(n);
int answer = n + 1;
// 다음 큰 숫자가 input값과 1의 개수가 같을 때까지 증가 시키기
while (get_1_count(answer) != cnt)
{
++answer;
}
return answer;
}
2진수일때 1 개수 구하기는 다음과 같이 비트연산을 이용할 수도 있다
int get_1_count_bit_ver(int n)
{
int cnt = 0;
for (int i = 0; i < 31; ++i)
{
// 2^i의 자리에 1이 있을때
if (n & 0x01 << i)
{
++cnt;
}
}
return cnt;
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]2017 팁스타운 : 짝지어 제거하기(level 2)(c++) (0) | 2020.05.20 |
---|---|
[프로그래머스]연습문제 : 땅따먹기(level 2)(c++) (0) | 2020.05.20 |
[프로그래머스]2019 카카오 개발자 겨울 인턴십 : 튜플(level 2)(c++) (0) | 2020.05.19 |
[프로그래머스]2017 카카오코드 본선 : 단체사진 찍기 (level 2)(c++) (0) | 2020.05.19 |
[프로그래머스] 연습문제 : 올바른 괄호 (level 2)(c++) (0) | 2020.05.14 |
댓글