https://school.programmers.co.kr/learn/courses/30/lessons/301647
코딩테스트 연습 > SELECT > 부모의 형질을 모두 가지는 대장균 찾기
문제 분석
난이도: LEVEL2
문제 요구사항
부모의 형질을 모두 보유한 대장균의 ID(ID), 대장균의 형질(GENOTYPE), 부모 대장균의 형질(PARENT_GENOTYPE)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 ID에 대해 오름차순 정렬해주세요.
형질 모두 보유했다?
대장균의 형질(GENOTYPE)은 정수로 주어지지만 이진수로 변환해서 판단해야 한다.
EX) GENOTYPE = 7 → 111(2)
GENOTYPE가 7이면 1,2,3 형질을 보유하는 것이다.
형질을 보유했다는 의미를 알았으니까 이제 부모의 형질을 모두 보유했는지 알아내는 법을 생각해야 한다.
부모의 형질을 모두 보유했는지?
부모의 GENOTYPE과 나의 GENOTYPE을 &(AND) 계산했을 때 부모의 GENOTYPE을 모두 가진다.
& 비트 연산
이진수 1111(2) 100010(2) AND 계산
100010
1111
000010
이런식으로 AND 계산을 한다.
부모의 형질을 모두 보유 X 케이스
부모 GENOTYPE = 7 나의 GENOTYPE = 10
7 = 111(2) 10 = 1010(2)
1010
111
0010 부모의 형질을 모두 갖고 있지 않는다.
부모의 형질을 모두 보유 O 케이스
부모 GENOTYPE = 5 나의 GENOTYPE = 13
5 = 101(2) 13 = 1101(2)
1101
101
0101 (2) == 101(2) 부모의 형질을 모두 갖고 있는다.
정답 코드 (SELF 조인 사용)
SELECT A.ID, A.GENOTYPE, B.GENOTYPE AS PARENT_GENOTYPE
FROM
ECOLI_DATA A JOIN ECOLI_DATA B
ON A.PARENT_ID = B.ID
WHERE A.GENOTYPE & B.GENOTYPE = B.GENOTYPE
ORDER BY A.ID
'Algorithm > Programmers SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 분기별 분화된 대장균의 개체 수 구하기 (0) | 2024.09.07 |
---|---|
[MySQL] 프로그래머스 연도별 대장균 크기의 편차 구하기 (0) | 2024.09.07 |
[MySQL] 프로그래머스 모든 레코드 조회하기 (0) | 2024.09.07 |
[MySQL] 프로그래머스 역순 정렬하기 (0) | 2024.09.07 |
[MySQL] 프로그래머스 아픈 동물 찾기 (0) | 2024.09.07 |