본문 바로가기
SQL/MySQL

[MySQL] HackerRank - Binary Tree Nodes 문제 풀이

by 취준생 져니 2024. 8. 31.

문제 사이트

아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂

 

Binary Tree Nodes | HackerRank

Write a query to find the node type of BST ordered by the value of the node.

www.hackerrank.com

 


 

 

 

 

 

👉문제 설명

 

 

 

 

 

  • 트리의 노드 타입을 나누는 문제

 

 

 

👉문제 풀이

전체적인 구조를 잘 파악하는게 중요한 문제, IN에 대해서도 알고 있어야 문제를 쉽게 풀 수 있다

 

전체적인 로직

1) P가 Null -> Root

2) N이 P에 포함되지 않으면 -> Leaf

3) 그 이외 -> Inner

 

 

 

👉문제 풀이 과정

1. 노드타입별로 분류, CASE문 활용

case when p is null then 'Root' 
      when N NOT IN (select DISTINCT P from BST where p is not null) then 'Leaf' 
      else 'Inner' end

 

  • 조건에 따라 노드 타입을 분류하여야 하므로 CASE문 사용
  • P에 N이 포함되어 있는지를 확인하기 위해 서브쿼리를 통해 P를 select 하고 IN절 사용
  • IN절은 리스트/목록에 찾으려는 데이터가 있는지 확인하는 용도
  • DISTINCT : 중복없이 값 추출

 

 

 

👉최종 답안

select N, 
     (case when p is null then 'Root' 
      when N NOT IN (select DISTINCT P from BST where p is not null) then 'Leaf' 
      else 'Inner' end)
from BST
order by N

 

  • 최종 결과값을 보면 1~9까지 정렬되어 있어 order by를 사용하였음

 

 

 

👉고찰

처음에 전체적인 로직은 쉽게 알 수 있었지만 이걸 코드로 구현하는 과정에 생각이 많았다

IN과 서브쿼리를 통해 비교적 쉽게 할 수 있었지만 도출해내는 과정까지가 오래 걸렸당,,

IN절에 대해서도 공부를 더 해야겠다는 생각