*MySQL 버전, advanced select 문제입니다.
해커랭크 Binary Tree Nodes 문제, 샘플, 설명
💡 노드 타입 세 가지로 분류하기
- Root: 루트 노드, 최상위 노드
- Leaf: 리프 노드, 자식이 없는 단말 노드
- Inner: 루트, 리프 둘 다 아닌 노드
트리(그래프) - 나무위키
트리를 정의할 때에는 다양한 정의가 쓰이고, 다음은 모두 동치이다. GGG는 회로가 없는 연결 그래프이다.GGG는 회로가 없고, 단순 그래프의 형태를 유지하면서 간선을 추가할 경우 회로가 생긴다
namu.wiki
💡 1 Inner처럼 num node_type 포맷의 결과물
💡 N 오름차 순 정렬
해커랭크 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;
'SQL > HackerRank(해커랭크)' 카테고리의 다른 글
HackerRank(해커랭크) MySQL Weather Observation Station 19 문제 답 (2) | 2023.10.06 |
---|---|
HackerRank(해커랭크) MySQL Average Population of Each Continent 문제 답 (0) | 2023.10.05 |
HackerRank(해커랭크) MySQL Top Earners 문제 답 (0) | 2023.10.04 |
HackerRank(해커랭크) MySQL Weather Observation Station 15 문제 답 (0) | 2023.10.02 |
HackerRank(해커랭크) MySQL The Blunder 문제 답 (0) | 2023.09.24 |