https://school.programmers.co.kr/learn/courses/30/lessons/301646
이진법(Binay System):
이진법은 0과 1만을 사용하는 숫자 체계로써,
예를 들어 13이라는 십진수는 이진법으로 1101로 나타남.
형질과 비트 위치:
보통 각 형질은 이진수의 각 자리(비트)에 대응되는데 (오른쪽부터 1번째, 2번째, 3번째, 4번째 …)
예시:
MS SQL SERVER, MySQL 에서는 비트 AND 연산자(&) 혹은 오라클에서는 BITAND 함수를 사용하여 이진법으로 저장된 형질 값을 확인할 수 있음.
5의 이진 표현:
5는 이진법으로 0101 (앞에서부터 4자리로 표현하면)
→ 여기서 1번째 비트(값 1)와 3번째 비트(값 4)가 1임을 의미.
연산 의미:
(GENOTYPE & 5) 는 GENOTYPE의 이진 표현과 0101의 각 비트를 비교하여 둘 다 1인 자리의 값을 반환
ID 4의 경우 GENOTYPE 13은 이진법으로 1101
1101 (13)
& 0101 (5)
--------
0101 (5) → 5 > 0, 조건 만족
ID 1의 경우 GENOTYPE 8은 이진법으로 1000
1000 (8)
& 0101 (5)
--------
0000 (0) → 조건 불만족
2의 이진 표현:
2는 이진법으로 0010
→ 2번째 비트만 1. 즉, 형질 2를 의미
연산 의미:
(GENOTYPE & 2)는 GENOTYPE과 0010을 비교해서 2번째 비트가 1이면 2를 반환하고, 1이 아니면 0을 반환
ID 2의 경우 GENOTYPE 15는 이진법으로 1111
1111 (15)
& 0010 (2)
--------
0010 (2) → 2 ≠ 0, 조건 불만족
ID 4의 경우 GENOTYPE 13은 이진법으로 1101
1101 (13)
& 0010 (2)
--------
0000 (0) → 조건 만족
문제에서 요구하는 조건은 "2번 형질이 없는(즉, (GENOTYPE & 2) = 0) 대장균 중, 1번 또는 3번 형질이 있는 경우(즉, (GENOTYPE & 5) > 0)를 찾아 그 개수를 출력"하는 것
(GENOTYPE & 2) = 0:
→ 대장균에 형질 2가 없음을 확인하고
(GENOTYPE & 5) > 0:
→ 대장균에 형질 1(값 1) 또는 형질 3(값 4) 또는 둘 다 있는 경우 조건에 부합하도록 함.
(5는 1과 4의 합이며, 이진법으로 보면 0101로 두 자리가 1인 값임.)
즉, 이 조건들을 결합하면 형질 2는 없어야 하면서, 형질 1 또는 3 중 하나 이상을 보유한 대장균 개체만 선택됨.
SQL 쿼리에서는 다음과 같이 조건을 구현할 수 있음.
MS SQL Server: (MySQL도 동일)
SELECT COUNT(ID) AS COUNT
FROM ECOLI_DATA
WHERE (GENOTYPE & 5) > 0
AND (GENOTYPE & 2) = 0;
오라클의 경우 (비트 연산 함수 사용):
SELECT COUNT(ID) AS COUNT
FROM ECOLI_DATA
WHERE BITAND(GENOTYPE, 5) > 0
AND BITAND(GENOTYPE, 2) = 0;