MY SQL 비트마스크 연산 실수
2026.01.21. 17:04
프로그래머스 코딩테스트 문제 중 특정 형질을 가지는 대장균 찾기 문제.
문제
2번 형질이 보유하지 않으면서 1번이나 3번 형질을 보유하고 있는 대장균 개체의 수(
COUNT)를 출력하는 SQL 문을 작성해주세요. 1번과 3번 형질을 모두 보유하고 있는 경우도 1번이나 3번 형질을 보유하고 있는 경우에 포함합니다.
각 대장균 별 형질을 2진수로 나타내면 다음과 같습니다.
ID 1 : 1000₍₂₎
ID 2 : 1111₍₂₎
ID 3 : 1₍₂₎
ID 4 : 1101₍₂₎각 대장균 별 보유한 형질을 다음과 같습니다.
ID 1 : 4
ID 2 : 1, 2, 3, 4
ID 3 : 1
ID 4 : 1, 3, 4따라서 2번 형질이 없는 대장균 개체는 ID 1, ID 3, ID 4 이며 이 중 1번이나 3번 형질을 보유한 대장균 개체는 ID 3, ID 4 입니다.
실수한 구문
SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE (GENOTYPE & 2) = 0
AND ( (GENOTYPE & 3) > 0 OR (GENOTYPE & 1) > 0)비트마스크는 2진수로 이뤄져 있기 때문에 3으로 인식시키면 1+2가 존재하는지를 체크하게 된다. 3번 형질의 경우 비트마스크로는 왼쪽에서 2번째 자리, 즉 4이기 때문에 4를 체크해줘야한다.