[SQL] 부모의 형질을 모두 가지는 대장균 찾기

Ray·2025년 6월 10일

SQL

목록 보기
29/39

🔎 문제설명

  • 출처: 프로그래머스
  • 사용언어(RDBMS): SQL(MySQL)
  • 문제:

    부모의 형질을 모두 보유한 대장균의 ID(ID), 대장균의 형질(GENOTYPE), 부모 대장균의 형질(PARENT_GENOTYPE)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 ID에 대해 오름차순 정렬해주세요.




✅ 제출답안

# 풀이1
SELECT D.ID, D.GENOTYPE, A.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA D LEFT JOIN ECOLI_DATA A ON D.PARENT_ID = A.ID
WHERE D.GENOTYPE ^ A.GENOTYPE = D.GENOTYPE - A.GENOTYPE
ORDER BY D.ID;

# 풀이2
SELECT D.ID, D.GENOTYPE, A.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA D LEFT JOIN ECOLI_DATA A ON D.PARENT_ID = A.ID
WHERE D.GENOTYPE & A.GENOTYPE =  A.GENOTYPE
ORDER BY 1;



🚀 풀이기록

처음 이 문제를 접했을 때 부모의 형질을 담고 있는 자손을 어떻게 조건으로 걸어야 할지 1시간 넘게 고민했었다. 오늘 다시 풀었을 때 역시 이 부분이 가장 고민되었지만, 그래도 10분 내로 고민하고 해결할 수 있었다.


당시에 아래처럼 고민했었다.

부모의 형질을 모두 보유하고 있다는 의미

  1. 부모와 같은 형질인 경우
  2. 부모의 형질을 가지면서 다른 형질도 가지고 있는 경우

이걸 어떻게 쿼리문으로 나타낼지가 가장 큰 관건이다.

고민하다가 lv1에서 비슷한 문제가 나왔을 때 비트연산을 사용했던 것이 기억났다.

그렇다면 비트연산을 어떻게 적용해야할까?

  1. 부모와 같은 형질인 경우 ⇒ 비트연산없이 구현가능

    • 빼주면 0
    • 나눠주면 1
  2. 부모의 형질을 가지면서 다른 형질도 가지고 있는 경우 ⇒ 이 부분이 어려움

    • 자손이 어떤 형질을 가지냐에 따라 빼기의 결과와 나눗셈의 결과가 달라짐

    고민하다가

    • 자손의 형질과 부모의 형질을 XOR연산을 하는 경우 자손이 추가적으로 갖는 형질만 남는다는 사실을 알게 됨(풀이1에 적용)
      WHERE D.GENOTYPE ^ A.GENOTYPE = D.GENOTYPE - A.GENOTYPE
    • 자손의 형질과 부모의 형질과 AND연산으로 비교할 경우 부모의 형질만 나타난다는 사실을 알게 됨(풀이2에 적용)
      WHERE D.GENOTYPE & A.GENOTYPE = A.GENOTYPE
profile
미래의 독자인 나를 위해 글을 씁니다.

0개의 댓글