Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

집 짓는 개발블로그

[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기 (MySQL) - 비트 연산자 &, |, ^ 본문

MySQL

[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기 (MySQL) - 비트 연산자 &, |, ^

취준er 2024. 6. 20. 19:01

 

 

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

소요시간: ♾️

 

 

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을 구현하기 위해 별칭을 다르게 두고 원하는 조건으로 조인했다.