알고리즘/프로그래머스

프로그래머스 - 부모의 형질을 모두 가지는 대장균 찾기

초심을 찾자 2025. 2. 11. 10:48
SMALL

 
2025.02.10 - [알고리즘/프로그래머스] - 프로그래머스 - 특정 형질을 가지는 대장균 찾기 ( SQL )에 이어 대장균 시리즈 Level2인 부모의 형질을 모두 가지는 대장균 찾기 문제를 가지고 왔다. 해당 문제를 풀기전에 사전 지식이 있으면 좋을 것 같다. 바로 Join다. 그래서 해당 포스팅을 쓰기전에 Join을 설명하기 위해 포스팅을 하나 했는데 참고하면 좋을 것 같다.
※ Join 설명 포스팅 : 2025.02.11 - [DB] - DataBase Join이란?

알고리즘 난이도 및 시간 ( ※ 개인적인 의견 )
난이도 : Level  2.5( ※ Min : 0, Max : 10 )
풀이 시간 : 7분
제출 횟수 : 1번
풀이 결과 : Pass


문제 설명

 금번 문제도 문제 설명은 그냥 읽고 아 저 Table에는 이러한 정보들이 있구나 정도로만 이해하고 넘어가면 된다. 중요한 내용은 크게 없기 때문이다.

출처 : 프로그래머스

 이전 문제와 다르게 조건이 조금 까다로워졌다. 부모의 형질을 모두 보유한 대장균의 ID와 대장균의 형질 그리고 부모 대장균의 형질을 출력하는 SQL문을 작성하라고 한다. 또한, 결과 값을 ID를 기반으로 오름차순 정렬을 하면 된다.

출처 : 프로그래머스


문제풀이

 우리는 여기서 문제를 보고 어떤 Query문이 필요할까?를 바로바로 Catch가 되어야 한다. 물론 이제 막 DB를 공부하는 사람이라면 어려울 수 있다. 그렇기 때문에 같이 한 번 문장별로 정리를 해보자.

 

  • 부모의 형질을 모두 보유한 : 부모의 GENOTYPE & 자식의 GENOTYPE  =  부모의 GENOTYPE
    • 그러면 여기서 의문이 들것이다. 자식의 형체를 비교할 때 부모의 ID를 통해 부모의 GENOTYPE을 확인해야한다. 하지만 같은 row에 있지 않기 우리는 여기서 Join을 해서 하나의 Table을 더 만들어야 겠구나 라는 것을 알아채야 한다.
  • 대장균의 ID(ID), 대장균의 형질( GENOTYPE ), 부모 대장균의 형질 ( PARENT_GENOTYPE )을 출력하는 SQL = 자식의.SELECT ID, 자식의.GENOTYPE, 부모의.GENOTYPE as PARENT_GENOTYPE 

 

  • ID에 대해 오름차순 정렬 : ORDER BY ID

 자 위의 내용을 한 번 활용하여 SQL문을 만들어 보자. 아래에 생소한 부분은 INNER JOIN 밖에 없을 것 같은데 JOIN 포스팅을 보고 이해하면 크게 어려움이 없을 것 같다.

SELECT
    C.ID,
    C.GENOTYPE,
    P.GENOTYPE AS PARENT_GENOTYPE 
FROM
    ECOLI_DATA AS C 
INNER JOIN
    ECOLI_DATA AS P ON C.PARENT_ID = P.ID
WHERE  1=1 
       AND C.GENOTYPE & P.GENOTYPE = P.GENOTYPE
ORDER BY
    ID

 


결과

 

 
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/301647

 

프로그래머스

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

programmers.co.kr