huginn muninn

[leetcode] 608. Tree Node 본문

카테고리 없음

[leetcode] 608. Tree Node

_maddy 2024. 6. 19. 18:08

https://leetcode.com/problems/tree-node/

 

문제

 

SELECT 
    ID,
    (CASE
        WHEN P_ID IS NULL THEN "Root"
        WHEN ID IN (SELECT DISTINCT P_ID FROM TREE) THEN "Inner"
        ELSE "Leaf"
        END
    ) AS type
FROM TREE;

 

이 문제에서 배울 점은 case 문의 작동 순서라고 생각한다. 조건은 까다롭지 않아서 문제 풀기 전에 어떻게 풀어야 할지 잠시 생각하고 바로 문제를 풀었다. 

 

<조건>

-- root : 부모가 없어야 함. p_id null
-- inner : 부모도 있고, 자식도 있어야 함.. 
-- leaf: 부모만 있어야 함, 자식은 없음. 즉 p_id에 본인 아이디가 없어야 함. 
 

조건 써놓고 나니 너무 말이 이상한거임.. ㅠ 근데 이렇게 쓸 수 밖에 없었음

 

 

case 문의 작동 순서

 

CASE
    WHEN score >= 60 THEN 'C'
    WHEN score >= 70 THEN 'B'
    WHEN score >= 90 THEN 'A'
    ELSE 'D'
END AS grade

 

점수별로 등급을 부여하는 코드를 짰다. 이 코드의 문제점을 무엇일까?

바로 순서가 잘못되었다는 것!! 위 코드로 등급을 부여하면 아래 테이블 처럼 등급이 부여될 것이다. 

 

점수 등급
65 C
35 D
98 C
87 C
54 D

 

CASE 문은 각 WHEN 절의 조건을 순서대로 평가한다. 처음으로 TRUE가 되는 WHEN 절의 결과가 반환되고 이후 등장한 조건에 해당하더라도 값이 이미 할당되어있는 상태이기 때문에 값을 바꾸지 않는다. 즉 맞게 코드를 구현하려면 아래와 같이 순서를 바꾸어줘야 한다. 

 

CASE
    WHEN score >= 90 THEN 'A'
    WHEN score >= 80 THEN 'B'
    WHEN score >= 70 THEN 'C'
    ELSE 'D'
END AS grade