문제 링크 : 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 사용도 핵심적이었다.
'프로그래밍 > MySQL' 카테고리의 다른 글
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2025.02.16 |
---|---|
[프로그래머스] FrontEnd 개발자 찾기 (2) | 2025.02.12 |
[프로그래머스] 물고기 종류 별 대어 찾기 (0) | 2025.02.12 |
[프로그래머스] 주문량이 많은 아이스크림들 조회하기 (2) | 2025.02.10 |
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (0) | 2025.02.10 |