프로그래머스 - 부모의 형질을 모두 가지는 대장균 찾기
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