문제
풀이
#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
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 줄 서는 방법 - 순열(DFS), DP (0) | 2023.01.24 |
---|---|
[프로그래머스] 땅따먹기 - DP (0) | 2022.12.18 |
[프로그래머스] 3 x n 타일링 - MOD 모듈러 연산 (0) | 2022.12.11 |
[프로그래머스] 2 x n 타일링 - 피보나치수열 (0) | 2022.12.11 |
[프로그래머스] 가장 큰 정사각형 찾기 - DP (0) | 2022.12.11 |