[MySQL] 프로그래머스 - 특정 형질을 가지는 대장균 찾기 (Feat. 비트연산)

켈로그·2025년 6월 11일

SQL

목록 보기
19/20

프로그래머스 - SQL고득점KIT - 특정 형질을 가지는 대장균 찾기

문제 유형: 비트 연산


문제 요약

ECOLI_DATA 테이블에서

  • 2번 형질이 없는 개체이면서,
  • 1번 또는 3번 형질을 보유한 개체의 개수를 구하는 문제입니다.

테이블 구조

컬럼명타입설명
IDINTEGER대장균 개체 ID
PARENT_IDINTEGER부모 개체 ID
SIZE_OF_COLONYINTEGER군집 크기
DIFFERENTIATION_DATEDATE분화일
GENOTYPEINTEGER형질 (비트 저장)

GENOTYPE의 의미

GENOTYPE은 각 형질을 비트로 저장합니다. 예를 들어:

  • 1번 형질 → 2⁰ = 1
  • 2번 형질 → 2¹ = 2
  • 3번 형질 → 2² = 4
  • 4번 형질 → 2³ = 8

이진수 예시:

GENOTYPE2진수 표현포함 형질
100011번
401003번
501011번, 3번
1311011번, 3번, 4번
1511111, 2, 3, 4

조건 정리

  1. 2번 형질 없음
    → GENOTYPE & 2 = 0

  2. 1번 또는 3번 형질 있음
    → GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0


핵심 문법 정리

& (비트 AND 연산자)

  • 두 숫자의 비트값을 AND 연산
  • 특정 형질 보유 여부 확인에 사용

조건 결합

  • AND: 두 조건 모두 만족해야 함
  • OR: 둘 중 하나만 만족해도 됨

비트 연산 정리

&는 AND 연산자로, 두 수의 이진수 자리마다 모두 1이면 1을 반환.

항목설명
& 연산자두 비트가 모두 1일 때만 1을 반환
& n = 0해당 형질 없음
& n > 0해당 형질 있음
OR 연산자둘 중

예시:


GENOTYPE = 5  → 0101  
5 & 1 → 0101 & 0001 = 0001 → 결과 1 (1번 형질 있음)  
5 & 2 → 0101 & 0010 = 0000 → 결과 0 (2번 형질 없음)

최종 SQL 답

SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE GENOTYPE & 2 = 0
  AND (GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0);
profile
호랑이기운

0개의 댓글