알고리즘 & SQL/프로그래머스

[프로그래머스 SQL] Lv4. 특정 세대의 대장균 찾기

양을 좋아하는 문씨 2025. 2. 20. 12:57

정답 보기

더보기
select id
from ECOLI_DATA
where parent_id in (
    select id
    from ECOLI_DATA
    where PARENT_ID in (
        select id
        from ECOLI_DATA
        where PARENT_ID is NULL
    )
)
order by id;

핵심 아이디어 :

1. 3세대까지면 깊이가 깊지 않으니까, 0세대부터 포함해가며 찾아 내려가면 되지 않을까?

2. 약간 dfs같은 접근으로 정답이 나올 때까지 찾아 내려가면 될 것 같다. (근데 재귀문을 몰라서 그냥 나올때까지 where로 조회...)

3. parent_id가 NULL인 id를 조회하고, 그것을 부모로 가지는 id를 조회하고, 그것을 부모로 가지는 id를 조회하고...반복


재귀 버전을 학습해서 푼 코드

더보기
with recursive ecolis(gen, id, parent_id)
as (
    select 1 gen, id, parent_id
    from ECOLI_DATA
    where parent_id is null
    union all
    select e.gen + 1, ed.id, ed.parent_id
    from ECOLI_DATA ed
    join ecolis e
    on ed.parent_id = e.id
)

select id
from ecolis
where gen = 3;

이건 다른 사람이 푼 것들좀 참고하면서 했다.

코드가 되게 생소해가지고 이해하는데 시간이 좀 걸렸는데,

써놓고 보니까 엄청 깔끔한 것 같다.