[Programmers/mysql] 301647: 부모의 형질을 모두 가지는 대장균 찾기

songeunm·2024년 9월 3일

PS - sql

목록 보기
6/58
post-thumbnail

문제
Lv.2 / SELECT

문제 흐름

문제를 보아하니 저번에 python 문제를 풀 때 이용했던 비트마스킹을 이용하면 되겠다 싶었다.
일단 부모의 형질을 연결지어주기 위해서 같은 테이블을 JOIN한다.
왼쪽이 현재 대장균의 정보, 오른쪽이 부모 대장균의 정보가 되도록 JOIN했다.
그리고 현재 대장균의 형질과 부모 대장균의 형질을 &를 통해 비트연산했을 때 부모 대장균 형질 값과 같다면 부모 대장균 형질을 모두 가진 것이라고 할 수 있다.

코드

/*
부모의 형질을 모두 가지는 대장균 찾기
SELECT
*/

-- 비트마스킹
SELECT T1.ID, T1.GENOTYPE, T2.GENOTYPE PARENT_GENOTYPE
FROM ECOLI_DATA T1 LEFT JOIN ECOLI_DATA T2
ON T1.PARENT_ID = T2.ID
WHERE T1.PARENT_ID IS NOT NULL
AND (T1.GENOTYPE & T2.GENOTYPE = T2.GENOTYPE)
ORDER BY 1;

마무리

2레벨 치고 정답률이 꽤나 낮아서 뭘까 했더니 아마 비트마스킹 때문인 것 같다.
알고나면 별고 아니지만 생각해내기는 쉽지 않긴 하다.

profile
데굴데굴 구르는 개발자 지망생

0개의 댓글