본문 바로가기

Algorithm/Programers - C++

[프로그래머스] 점프와 순간 이동 - 비트연산

 

Level.2

 

문제

 

풀이

#include <iostream>
using namespace std;

int solution(int n)
{
    int ans = 0;
    while(n>0){
        if(n%2==0){
            n/=2;
        }
        else {
            int num = n%2;
            ans += num;
            n -= num;
        }
    }
    
    return ans;
}

 

 


다른 사람 풀이 1. 

#include <iostream>
using namespace std;

int solution(int n)
{
    int ans = 0;
    while(n >0)
    {
        ans += n%2;
        n /=2;
    }

    return ans;
}

 

다른 사람 풀이 2. 

#include <iostream>
using namespace std;

int solution(int n)
{
    int ans=0;
    for(int i=0;i<31;i++)
        if(n&(1<<i))
            ans++;
    return ans;
}

 

for(int i=0;i<31;i++)
        if(n&(1<<i))
            ans++;

위 방법을 통해 n을 2진법으로 표현했을 때 1의 개수를 셀 수 있다. 

 

연산자 설명
& &연산자는 상수사이이에 위치하게 되면 비트연산(AND)를 하게 된다. 
<< 피연산자의 비트 열을 왼쪽으로 이동시킨다.
>> 피연산자의 비트 열을 오른쪽으로 이동시킨다.