알고리즘/SQL
[PROG] LV2 부모의 형질을 모두 가지는 대장균 찾기 (MySQL)
세동세
2024. 10. 17. 19:21
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/301647
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
문제에서 대장균 별 형질을 2진수로 나타내는데, 부모의 형질을 모두 보유해야한다.
SQL에서 비트연산자를 사용해서 같은 것을 찾아야한다.
WHERE CHILD.GENOTYPE & PARENT.GENOTYPE = PARENT.GENOTYPE
AND(&) 연산자는 두 비트가 모두 1인 경우에만 1을 반환한다.
SELECT 6 & 3 AS result;
- 6은 이진수로 110
- 3은 이진수로 011
- AND 연산 결과 010 (즉 2)
다음이기 때문에 & 문을 사용해서 해결해야한다!
코드
SELECT
CHILD.ID AS ID,
CHILD.GENOTYPE AS GENOTYPE,
PARENT.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA AS CHILD
INNER JOIN ECOLI_DATA AS PARENT
ON CHILD.PARENT_ID = PARENT.ID
WHERE CHILD.GENOTYPE & PARENT.GENOTYPE = PARENT.GENOTYPE
ORDER BY ID;