코딩테스트

25/04/22 프로그래머스 SQL 고득점 Kit

helena1129 2025. 4. 22. 23:42

1. 특정 세대의 대장균 찾기(Level 4)

 

프로그래머스

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

programmers.co.kr

 

3세대의 대장균의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 이때 결과는 대장균의 ID 에 대해 오름차순 정렬해주세요.

 

1) 서브쿼리 + 조인

-- S: ID
-- F: ECOLI_DATA
-- W: 3세대
-- O: ID ASC
SELECT ID
FROM ECOLI_DATA ED INNER JOIN 
(SELECT ID AS PARENT_ID
FROM ECOLI_DATA
WHERE PARENT_ID IN 
    (SELECT ID
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL)) SG ON ED.PARENT_ID = SG.PARENT_ID
ORDER BY ID

 

2) 재귀함수

-- S: ID
-- F: ECOLI_DATA
-- W: 3세대
-- O: ID ASC
WITH RECURSIVE CTE AS(
    SELECT ID, PARENT_ID, 1 AS GEN
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL # 초기조건
    
    UNION ALL
    
    SELECT R.ID, R.PARENT_ID, GEN+1 AS GEN
    FROM CTE INNER JOIN ECOLI_DATA R ON R.PARENT_ID = CTE.ID # 반복조건)
SELECT ID
FROM CTE
WHERE GEN = 3
ORDER BY ID

 

NOTE: 재귀함수 꼭 기억하기!


2. 멸종위기의 대장균 찾기(Level 5)

 

프로그래머스

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

programmers.co.kr

 

각 세대별 자식이 없는 개체의 수(COUNT)와 세대(GENERATION)를 출력하는 SQL문을 작성해주세요. 이때 결과는 세대에 대해 오름차순 정렬해주세요. 단, 모든 세대에는 자식이 없는 개체가 적어도 1개체는 존재합니다.

 

-- S: 자식이 없는 개체의 수, 세대
-- F: ECOLI_DATA
-- O: GENERATION ASC
WITH RECURSIVE CTE AS(
    SELECT ID, PARENT_ID, 1 AS GENERATION
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL # 초기조건
    
    UNION ALL
    
    SELECT R.ID, R.PARENT_ID, GENERATION+1 AS GENERATION
    FROM CTE INNER JOIN ECOLI_DATA R ON R.PARENT_ID = CTE.ID # 반복조건)
SELECT COUNT(*) AS COUNT, GENERATION
FROM CTE
WHERE ID NOT IN (SELECT PARENT_ID FROM CTE WHERE PARENT_ID IS NOT NULL)
GROUP BY GENERATION
ORDER BY GENERATION

 

NOTE: 재귀함수 꼭 기억하기!22222