알고리즘 & 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;
이건 다른 사람이 푼 것들좀 참고하면서 했다.
코드가 되게 생소해가지고 이해하는데 시간이 좀 걸렸는데,
써놓고 보니까 엄청 깔끔한 것 같다.