본문 바로가기

프로그래밍/MySQL

[프로그래머스] 멸종위기의 대장균 찾기

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

 

프로그래머스

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

programmers.co.kr

 

풀이

WITH RECURSIVE GEN AS(
    SELECT
    ID,
    PARENT_ID,
    1 AS GE
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL
    
    UNION ALL
    
    SELECT
    N.ID,
    N.PARENT_ID,
    G.GE+1
    FROM ECOLI_DATA N
    JOIN GEN G
    ON N.PARENT_ID = G.ID
)
SELECT
COUNT(*) AS COUNT,
G1.GE AS GENERATION
FROM GEN G1
LEFT JOIN GEN G2
ON G1.ID = G2.PARENT_ID
WHERE G2.ID IS NULL
GROUP BY G1.GE
ORDER BY G1.GE

 

풀이 해설

  • MySQL에서의 재귀함수 사용이 핵심이었다. 재귀함수의 기본적인 형태는 다음과 같다.
WITH RECURSIVE CTE_NAME (컬럼1, 컬럼2, ...) AS (
    -- 1️⃣ 기본(Anchor) 쿼리: 재귀의 시작점
    SELECT 초기값1, 초기값2, ...
    FROM 테이블
    WHERE 조건

    UNION ALL

    -- 2️⃣ 재귀(Recursive) 쿼리: 이전 결과를 참조하여 계속 반복
    SELECT 새로운값1, 새로운값2, ...
    FROM 테이블
    JOIN CTE_NAME ON 조건  -- 이전 결과와 연결
)

-- 3️⃣ 최종 결과 조회
SELECT * FROM CTE_NAME;

 

  • 또한 LEFT JOIN 사용도 핵심적이었다.