본문 바로가기

Algorithm/Programers - C++

[프로그래머스] 다음 큰 숫자 - bitset

문제

 

풀이

#include <string>
#include <vector>

using namespace std;

int getOneCount(int num){
    int num_count = 0;
    while(num > 0){
        if(num % 2 == 1) num_count ++;
        num /= 2;
    }
    return num_count;
}

int solution(int n) {
    int count = 0;
    int answer = 0;

    count = getOneCount(n);
    
    for(int i = n+1 ; ;i++){
        int i_count = getOneCount(i);
        if(i_count == count ) {
            answer = i;
            break;
        }
    }
    
    return answer;
}

 


다른 사람 풀이

#include <bitset>

using namespace std;

int solution(int n) {
    int num = bitset<20>(n).count();

    while (bitset<20>(++n).count() != num);
    return n;
}

bitset의 count를 사용했다.

 

 

bitset

#include <bitset>
#include <string>
using namespace std;

int main(){

    bitset<6> bit;         // 000000
    bitset<4> bit("1101");  
    bit = bitset<10>(67);
    
}
  • <bitset> 헤더를 포함하여 사용한다. 
  • bitset은 0 또는 1, true 또는 false의 값을 가지도록 할 경우 사용하며 여러 가지 비트 연산을 할 수 있도록 여러 멤버 함수들을 지원한다.

함수

함수 의미
all() 모든 비트가 1일경우 true 반환, 그렇지 않을 경우 false 반환
any() 비트가 1인것이 존재할경우 true반환, 그렇지 않을 경우 false 반환
none() 비트가 1인것이 존재하지 않을경우 true반환, 그렇지 않을 경우 false반환
count(n) 비트가 1인것의 개수를 반환
flip(n) 모든 비트의 값을 반전하거나 n번째의 비트를 반전
reset(n) 모든 비트를 0으로 설정하거나 n번째 비트를 0으로 설정
set(n, 0) n번째 비트를 0으로 변경, 생략할 경우 모든 비트를 1로 변경
size() bitset의 크기를 반환.
test(n) n번째 비트가 1이면 true반환
to_string() bitset을 2진수 문자열로 변환
to_ullong() bitset을 unsigned long long 타입으로 변환
to_ulong() bitset을 unsigned long타입으로 변환. 10진수로 변환

 

- Java

import java.util.BitSet;

public class Test
{
    public static void main( String[] args )
    {
        int N = 15;
        BitSet bset = new BitSet( N );
    }
}

 

 


https://learn.microsoft.com/ko-kr/cpp/standard-library/bitset-class?view=msvc-170 

 

bitset 클래스

자세한 정보: bitset 클래스

learn.microsoft.com