본문 바로가기
programmers

[MySQL] 부모의 형질을 모두 가지는 대장균 찾기 -비트연산

by socialcomputer 2025. 9. 2.
반응형

최근에 mysql문제를 몇 개 풀었는데 대장균 관련 문제가 시리즈처럼 있어서 재밌어 보여 풀어봤다

https://school.programmers.co.kr/learn/courses/30/lessons/301647

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

대장균들이 주기적으로 분화되어 부모와 자식 데이터가 담긴 테이블이 있다. ecoli_data

부모의 형질(genotype)을 모두 가지는 자식 개체를 구하는 문제다

1. 부모와 자식을 연결 join

2. (부모 형질 & 자식 형질) = 부모 형질인 경우 모두 물려받은 경우만

select c.id, c.genotype, p.genotype as parent_genotype from ecoli_data c
inner join ecoli_data p on c.parent_id = p.id
where (p.genotype & c.genotype) = p.genotype
order by c.id;

 

&는 and 연산으로 둘 다 true일때 true, 나머지는 false

||는 or 연산으로 하나만 true면 true 가 된다

2 & 5 
-> 10(2) & 101(2) = 0

오랜만에 비트연산을 봐서 공부도 된것같다

 

 

특정 형질을 가지는 지 확인하는 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/301646

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

이것도 같은 방식이다

select count(*) as count from ecoli_data
where (genotype & 2) = 0 and
    ((genotype & 1) > 0 or (genotype & 4) > 0 );
2번 형질: 0010 = 2
1번 형질: 0001 = 1, 
3번 형질: 0100 = 4

 

반응형

댓글