본문 바로가기

HackerRank

[HackerRank - SQL] Type of Triangle

문제

Write a query identifying the type of each record in the TRIANGLES table using its three side lengths. Output one of the following statements for each record in the table:

  • Equilateral: It's a triangle with 3 sides of equal length.
  • Isosceles: It's a triangle with 2 sides of equal length.
  • Scalene: It's a triangle with 3 sides of differing lengths.
  • Not A Triangle: The given values of A, B, and C don't form a triangle.

샘플 인풋 데이터

설명

문제 추가 설명

풀이

  • 이 문제를 풀기 위해서는 'CASE WHEN 구문은 작성된 순서대로 실행된다'는 점을 반드시 알아야 한다.
  • 문제와 설명 부분에서는 'Not a Triangle'에 대한 설명을 마지막에 써두었지만, 이를 쿼리로 작성할 때도 마지막에 작성하면, 오답이다.
  • Not a Triangle에 포함되는 레코드와 Isosceles, Scalene에 포함되는 레코드는 교집합이 있을 수 있기 때문이다.
  • 따라서 가장 명확하게 필터링 할 수 있는 조건부터 먼저 적는 게 데이터를 정확하게 변환할 수 있는 방법이다.
SELECT CASE WHEN A = B AND B = C AND A = C THEN 'Equilateral'
            WHEN A + B <= C OR A + C <= B OR B + C <= A THEN 'Not A Triangle'
            WHEN A = B OR B = C OR A = C THEN 'Isosceles'
            WHEN A != B AND B != C AND A != C THEN 'Scalene'
       END AS type
FROM TRIANGLES