[해커랭크 SQL] Type of Triangle

hwan22·2022년 5월 3일
0

SQL 문제풀이

목록 보기
3/5
post-thumbnail

문제

TRIANGLES 테이블에서 3개의 변을 나타내는 칼럼들을 가지고 조건을 만족하는
1.정삼각형
2.이등변삼각형
3.단순 삼각형
4.삼각형이 형태가 아닌

총 4가지 카테고리로 나눠서 출력하는 쿼리를 작성해보자.
(기본적으로 삼각형은 두 변의 길이의 합이 나머지 한 변의 길이보다 커야함.)


풀이

문제풀이 영상 보기 전 나의 쿼리

SELECT CASE
           WHEN A = B AND B = C AND A = C THEN 'Equilateral'
           WHEN (A = B OR B = C OR A = C) 
                    AND (A + B > C) AND (B + C > A) AND (A + C > B) THEN 'Isosceles'
           WHEN A != B AND B != C AND A != C 
                    AND (A + B > C) AND (B + C > A) AND (A + C > B) THEN 'Scalene'
           WHEN (A + B <= C) OR (B + C <= A) OR (A + C <= B) THEN 'Not A Triangle'
            -- Last code line ELSE 'Not A Triangle' is also possible
       END
FROM triangles;

이등변 삼각형과 길이가 모두 다른 삼각형 조건은
어떤 변이 가장 긴 변인지 모르기 때문에 삼각형이 되는 조건을 모두 나열하는 식으로 작성하였다.

백문이불여일타 영상풀이 쿼리

SELECT CASE
		   WHEN A = B AND B = C THEN 'Equilateral'
           WHEN (A + B <= C) OR (B + C <= A) OR (A + C <= B) THEN 'Not A Triangle' 
           WHEN A = B OR B = C OR A = C THEN 'Isosceles'
           ELSE 'Scalene'
       END
                  
FROM triangles 

Not A Triangle 조건을 먼저 정의해주면서
나머지 삼각형에 대한 조건도 훨씬 더 간결하게 작성할 수 있었던 쿼리다.

직관적으로 봐도 내 쿼리와 조건문 길이 차이가 나는 것을 알 수 있다.
정말 단순하게 삼각형 조건을 모두 나열했기 때문에 쿼리 가독성이 훨신 떨어진다.

Submit 결과 정답으로 처리됐지만 조건을 쿼리로 생각하면서 작성하는데 시간이 오래걸렸고.. 계속 틀려서 여러번 제출했다.
아직 CASE문에 대한 노하우? 조금 더 적응이 필요할 것 같다..!


⛔️ CASE문 주의할 점

CASE
WHEN ~ THEN ★ (첫번째 조건에 대한 값)
WHEN ~ THEN ▲(두번째 조건에 대한 값)
....
END

첫번째 WHEN THEN에 대한 결과는 ★으로 정의했기 때문에 다음 줄의 조건에 해당돼도 ★으로 나타남.

즉, CASE문 쓸 때에 WHEN절의 순서를 쓰는 것도 매우 중요하다!

이해를 위해 Type of Triangle 문제로 생각해보면,
정삼각형 이등변삼각형이니깐 이등변 삼각형 조건을 먼저 쓰면 다음 조건으로 정삼각형 조건을 작성하고
해당 조건을 만족해도 정삼각형으로 정의못함.


문제 링크

https://www.hackerrank.com/challenges/what-type-of-triangle/problem?isFullScreen=true
(해당 문제 저작권은 HackerRank에 있습니다.)

profile
기록의 공간

0개의 댓글