집 짓는 개발블로그
[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기 (MySQL) - 비트 연산자 &, |, ^ 본문
https://school.programmers.co.kr/learn/courses/30/lessons/301647
소요시간: ♾️
1차시도 : CONV(변환하려는 변수, 변환 전 진법, 변환 후 진법) 로 이진수로 바꾼 다음 → BIN(이진수)를 이용해 문자열로 바꾼 다음 INSTR로 포함 여부를 판단하려 했다...
✨근데 그거 아님✨
1. MySQL에서는 어떤 진법의 수든 비트연산자 양 옆에 쓰면 알아서 이진법으로 변환한 뒤 연산해준다. 그냥 5 ^ 8 이렇게 써도 된단 뜻.
2. 이진수1이 이진수2에 포함되냐 안 되냐 판단하려면? → 이진수1 & 이진수2 이렇게 비트AND 연산을 해준 뒤, (이진수1 & 이진수2) = 이진수1 AS 'is_contained' 로 판단 가능하다. 예를 들어, 0010(2)와 1010(2) 이라면, 비트and 후 0010(2)가 되어 0010(2)이 1010(2)에 포함된단 것을 알 수 있다.
3. 번외로 (이진수1 | 이진수2) = 이진수2 처럼 비트OR을 사용하는 것도 가능하다. (아래는 예시)
SELECT id, binary_value,
(binary_value & 0b1001 = 0b1001) AS condition1,
(binary_value | 0b1001 = binary_value) AS condition2
FROM binary_data;
4. 비트XOR을 쓰면 이진수끼리의 차도 구할 수 있다!
정답
SELECT E.ID, E.GENOTYPE, D.GENOTYPE AS 'PARENT_GENOTYPE'
FROM ECOLI_DATA E
JOIN ECOLI_DATA D ON E.PARENT_ID = D.ID
WHERE (E.GENOTYPE & D.GENOTYPE) = D.GENOTYPE
ORDER BY E.ID;
같은 테이블을 조인하는 SELF JOIN을 구현하기 위해 별칭을 다르게 두고 원하는 조건으로 조인했다.
'MySQL' 카테고리의 다른 글
[프로그래머스] 조건에 맞는 개발자 찾기 (MySQL) - EXISTS, 서브쿼리 (0) | 2024.06.22 |
---|---|
[프로그래머스] 업그레이드 할 수 없는 아이템 구하기 (MySQL) - IN, EXISTS, NULL, Three-valued logic (0) | 2024.06.21 |
[프로그래머스] 헤비 유저가 소유한 장소 (MySQL) (0) | 2024.06.21 |
[프로그래머스] 대장균의 크기에 따라 분류하기 2 (MySQL) - ROWNUM (0) | 2024.06.20 |
MySQL 일련번호 테이블 만들기(@ROWNUM) (0) | 2024.06.20 |