[Codility] Count Conforming Bitmasks
[Codility] Count Conforming Bitmasks


https://app.codility.com/programmers/trainings/9/count_conforming_bitmasks/start/
Codility
Your browser is not supported Please, update your browser or switch to a different one. Learn more about what browsers are supported
app.codility.com
해결전략
비트마스크 Bitmask
비트연산자
주어진 정수 A, B, C 중 적어도 하나에 conform하는 다른 정수의 개수를 찾아야 한다.
conform이라는 것은?
주어진 정수의 비트 중 하나라도 1이면, conform하는 정수의 해당 비트도 1이어야 한다.
A와 B가 있을 때, A가 B에 conform한다는 것은, B의 모든 1 비트에서 A의 해당 비트도 1이라는 것을 의미한다. 즉, B의 0 비트는 A에서 0이거나 1일 수 있다.
주어진 정수에서 0 비트의 개수를 세면, 그 위치에는 0이나 1이 올 수 있다. 이는 2의 거듭제곱 형태 구할 수 있다.
ex. 만약 주어진 정수에서 0 비트가 5개라면, 그 정수에 conform하는 다른 정수는 2^5, 즉 32개다.
정답코드
#include <cmath> int countZeroBits(int n) // '0' 비트의 개수를 세는 함수 { int cnt = 0; for (int i = 0; i < 30; i++) // 30비트까지 확인 { if ((n & (1 << i)) == 0) { cnt++; } } return cnt; } int solution(int A, int B, int C) { int a_cnt = countZeroBits(A); int b_cnt = countZeroBits(B); int c_cnt = countZeroBits(C); // 두 정수를 OR 연산한 결과에서 '0' 비트의 개수 계산 int ab_cnt = countZeroBits(A | B); int bc_cnt = countZeroBits(B | C); int ac_cnt = countZeroBits(A | C); // 세 정수를 OR 연산한 결과에서 '0' 비트의 개수 계산 int abc_cnt = countZeroBits(A | B | C); int answer = pow(2, a_cnt) + pow(2, b_cnt) + pow(2, c_cnt) - pow(2, ab_cnt) - pow(2, bc_cnt) - pow(2, ac_cnt) + pow(2, abc_cnt); return answer; }
'⭐ 코딩테스트 > Codility' 카테고리의 다른 글
[Codility] Abs Distinct (0) | 2024.02.20 |
---|---|
[Codility] Fib Frog (0) | 2024.02.20 |
[Codility] Disappearing Pairs (0) | 2024.02.19 |
[Codility] Binary Gap (0) | 2024.02.18 |
[Codility] Array Inversion Count (0) | 2024.02.18 |
댓글
이 글 공유하기
다른 글
-
[Codility] Abs Distinct
[Codility] Abs Distinct
2024.02.20 -
[Codility] Fib Frog
[Codility] Fib Frog
2024.02.20 -
[Codility] Disappearing Pairs
[Codility] Disappearing Pairs
2024.02.19 -
[Codility] Binary Gap
[Codility] Binary Gap
2024.02.18
댓글을 사용할 수 없습니다.