DA Study/TIL

[TIL] 비트연산자를 활용한 이진수 비교 # MYSQL # SQL

harrym8n 2025. 1. 1. 16:56

Programmers Lv.2 - 부모의 형질을 모두 가지는 대장균찾기
👉 문제 바로가기(프로그래머스)

-- 부모의 형질을 모두 보유한 대장균의 ID / 대장균의 형질 / 부모 대장균의 형질

SELECT t2.ID, t2.GENOTYPE, t1.GENOTYPE as PARENT_GENOTYPE
FROM ECOLI_DATA t1, ECOLI_DATA t2
WHERE t1.ID = t2.PARENT_ID AND
      t2.GENOTYPE & t1.GENOTYPE = t1.GENOTYPE
ORDER BY t2.ID

[ 논리 과정 ]

  1. Self Join을 통해 자식 대장균 정보 찾기
  2. 자식 대장균의 형질이 부모 대장균 형질을 모두 포함하는지 확인

[ 문제 상황 ]

  • 대장균 형질은 십진수이나 이진수를 통해 표현하여 해당 대장균이 가지는 형질을 확인할 수 있다.
  • 이진수를 통해 파악할 수 있는 부모 대장균 형질과 자식 대장균 형질을 비교해야한다.

[ 해결 ]

  • 비트 연산자 &를 통해 해결
    • 자식 대장균 형질 & 부모 대장균 형질 = 부모 대장균 형질

[ 회고 ]

  • 비트 연산자를 통해 십진수를 비교해 해당 값의 이진수 값을 비교할 수 있다.
    • & (AND): 두 비트가 모두 1일 때 1, 그렇지 않으면 0
    • | (OR): 두 비트 중 하나라도 1일 때 1, 그렇지 않으면 0
    • ^ (XOR): 두 비트가 다를 때 1, 같을 때 0
    • ~ (NOT): 각 비트를 반전 (0을 1로, 1을 0으로)