홍동이의 성장일기
[Hacker Rank] Binary Tree Nodes / [LeetCode] 608. Tree Node 본문
Tool/SQL 코딩테스트 풀이
[Hacker Rank] Binary Tree Nodes / [LeetCode] 608. Tree Node
홍동2 2023. 10. 12. 01:37
풀이 1
SELECT N
, CASE
WHEN P IS NULL THEN 'Root'
WHEN N IN (SELECT P
FROM BST
GROUP BY P
HAVING count(P) = 2) THEN 'Inner'
ELSE 'Leaf'
END
FROM BST
ORDER BY N
풀이 2
SELECT N
, CASE
WHEN P IS NULL THEN 'Root'
WHEN N IN (SELECT DISTINCT P
FROM BST) THEN 'Inner'
ELSE 'Leaf'
END
FROM BST
ORDER BY N
💡 문제풀이
우리가 해결해야 하는 Binary Tree는 위와 같은 모양을 하고 있습니다.
예시로 주어진 표를 살펴보면 P가 null인 경우는 Root인 것을 알 수 있습니다. Inner인 N의 경우 P에서 두번씩 사용된다는 공통점을 발견했습니다.
SELECT P
, count(P)
FROM BST
GROUP BY P
원하는대로 데이터가 뽑혀진 것 같습니다. 하지만 count(P)가 2인 값만 궁금하기 때문에 HAVING 조건을 걸어주었습니다.
SELECT P
, count(P)
FROM BST
GROUP BY P
HAVING count(P) = 2
Inner인 N값을 찾았으니 해당 구문을 CASE WHEN절에서 서브쿼리로 사용해주면 됩니다.
📍본 내용은 '[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이'를 수강하며 작성한 내용입니다.
SELECT id
, CASE
WHEN p_id IS NULL THEN 'Root'
WHEN id IN (SELECT p_id FROM tree) THEN 'Inner'
ELSE 'Leaf'
END as type
FROM tree
💡 문제풀이
p_id에 속해있는 id는 자식 노드를 가지고 있다는 뜻이기 때문에 'Inner'이 된다. 'Root'의 경우, id가 p_id에 속해있긴 하지만 CASE문 첫번째 조건에서 p_id가 NULL인 경우를 지정해주었기 때문에 제외시킬 수 있다. CASE 구문에 다중행 서브쿼리를 알맞게 사용해주면 해결할 수 있는 문제!
728x90
'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글
[HackerRank] Ollivander's Inventory (0) | 2023.10.12 |
---|---|
[HackerRank] SQL Project Planning (1) | 2023.10.12 |
[HackerRank] Weather Observation Station 5 (0) | 2023.10.02 |
[HackerRank] Occupations (1) | 2023.10.02 |
[HackerRank] New Companies (0) | 2023.09.30 |
Comments