SQL/HackerRank(해커랭크)

HackerRank(해커랭크) MySQL Binary Tree Nodes 문제 답

진리뷰 2023. 9. 30. 09:00
반응형

 

 

HackerRank(해커랭크)-MySQL-Binary-Tree-Nodes-문제-답-썸네일
Binary Tree Nodes 문제 답

 

 

*MySQL 버전, advanced select 문제입니다.

 

 

 

해커랭크 Binary Tree Nodes 문제, 샘플, 설명

 

💡 노드 타입 세 가지로 분류하기

  • Root: 루트 노드, 최상위 노드
  • Leaf: 리프 노드, 자식이 없는 단말 노드
  • Inner: 루트, 리프 둘 다 아닌 노드

 

*노드 관련 글 참조

 

트리(그래프) - 나무위키

트리를 정의할 때에는 다양한 정의가 쓰이고, 다음은 모두 동치이다. GGG는 회로가 없는 연결 그래프이다.GGG는 회로가 없고, 단순 그래프의 형태를 유지하면서 간선을 추가할 경우 회로가 생긴다

namu.wiki

 

💡 1 Inner처럼 num node_type 포맷의 결과물

💡 N 오름차 순 정렬

 

해커랭크-BinaryTreeNodes-문제
Binary Tree Nodes 문제

 

 

해커랭크-BinaryTreeNodes-샘플
Binary Tree Nodes 샘플, 설명 이미지

 

 

 

해커랭크 Binary Tree Nodes 답

 

N에 있는 값이 P에도 있다면 Inner라는 조건을 작성하는 것이 포인트인 문제.

 

  • IN

DISTINCT P에 포함하는 N을 구하기 위해 IN연산자 사용.

IN은 리스트/목록에 찾으려는 데이터가 있는지 확인 혹은 선택 시 사용한다.

특히 리스트/목록이 여러 개라면, OR을 여러 번 쓸 필요 없이 IN 하나로 해결 된다.

 

해당 문제도 P(=데이터가 있는지 찾으려는 목록)에 여러 값이 있는데, WHEN N = a OR N = b...처럼 쓸 필요 없다.

또한 IN을 사용해도 WHEN N IN('a' , 'b', 'c',..)처럼 쓸 필요 없이, 서브 쿼리로 DISTINCT P를 선택하면 한 번에 처리 가능.

 

WHEN N IN(SELECT DISTINCT P FROM BST)~

>> 중복없이 선택한 P 값에 N 값이 있다면~

 

  • CONCAT

 num node_type 포맷이어서 사용.

샘플을 보니 num과 node_type 사이에 띄어쓰기 있어서 N, ' ', 'node_type' 입력.

SELECT CASE
WHEN P IS NULL THEN CONCAT(N, ' ', 'Root')
WHEN N IN(SELECT DISTINCT P FROM BST) THEN CONCAT(N, ' ', 'Inner')
ELSE CONCAT(N, ' ', 'Leaf')
END
FROM BST
ORDER BY N;
반응형
top