https://www.hackerrank.com/challenges/binary-search-tree-1/problem?isFullScreen=true
어려웠던 문제 ...
n은 있는데 p가 null이면 root
n이긴 한데 p이진 않다면 leaf (애 역할은 하는데 부모 역할은 안하는 경우)
나머지는 inner
이렇게 구분해보았다
애 역할은 하는데 부모 역할은 하지 않는 경우를 찾기 위해서는 JOIN이 필요했다.
여기서 JOIN 조건을 적어주는게 엄청 헷갈렸다.
SELECT *
FROM bst a
LEFT JOIN bst b ON a.n = b.p
a의 애 역할을 하는 숫자가 b에서는 부모 역할을 하는 case와 그렇지 않은 case를 동시에 확인해야 했기 때문에 LEFT JOIN 해보았다. (a의 모든 row에 대해 봐야하므로)
그러면 다음과 같은 결과가 나온다.
1, 3, 5, 7은 n이기만 하다. --> leaf
2, 6, 4는 n이면서 p이기도 하다. --> inner
SELECT DISTINCT a.n,
CASE WHEN a.p IS NULL THEN 'Root'
WHEN b.n IS NULL THEN 'Leaf'
ELSE 'Inner' END AS name
FROM bst a
LEFT JOIN bst b ON a.n = b.p
ORDER BY a.n
'SQL > 문제풀이' 카테고리의 다른 글
[HackerRank] Occupations 📌 (0) | 2024.05.11 |
---|---|
[HackerRank] Weather Observation Station 19 / 제곱, 제곱근 함수 (0) | 2024.05.10 |
[HackerRank] Weather Observation Station 20 / MySQL로 medium 구하기 (0) | 2024.05.10 |
[HackerRank] SQL Project Planning 📌 (0) | 2024.05.10 |
[HackerRank] Top Competitors (0) | 2024.05.10 |