본문 바로가기
데이터/SQL 문제풀이

HackerRank SQL - Type of Triangle

by 찌노오 2022. 11. 15.

 

 

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  sides of equal length.
  • Isosceles: It's a triangle with  sides of equal length.
  • Scalene: It's a triangle with  sides of differing lengths.
  • Not A Triangle: The given values of A, B, and C don't form a triangle.

Input Format

The TRIANGLES table is described as follows:

Each row in the table denotes the lengths of each of a triangle's three sides.

Sample Input

Sample Output

Isosceles
Equilateral
Scalene
Not A Triangle

Explanation

Values in the tuple  form an Isosceles triangle, because .
Values in the tuple  form an Equilateral triangle, because . Values in the tuple  form a Scalene triangle, because .
Values in the tuple  cannot form a triangle because the combined value of sides  and  is not larger than that of side .

Problem

A,B,C 세변의 길이가 변수로 주어지고, 

4가지 조건에 따라 값을 반환하라.

  • 정삼각형: 세 변의 길이가 같은 삼각형
  • 이등변삼각형: 2변의 길이가 같은 삼각형
  • 부등변삼각형: 3변의 길이가 모두 다른 삼각형
  • 삼각형이 아닌: A,B,C가 삼각형이 만들어질 수 없는 조건일 때

Answer1

SELECT (CASE WHEN T.A+T.B+T.C - IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C)
                  <= IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C) THEN 'Not A Triangle'  
             WHEN T.A = T.B AND T.B = T.C THEN 'Equilateral'
             WHEN T.A = T.B OR T.B = T.C OR T.A = T.C THEN 'Isosceles'       
             ELSE 'Scalene' END) AS triangle
FROM TRIANGLES T

 

이 방법은 너무 무식한 것 같고 다른 효율적인 쿼리문이 있을 거라 생각한다.

같은 연산을 저렇게 반복하는 건 불편하고 부끄럽고 꺼림직하다.

 

 


How to solve

 

SELECT (CASE WHEN T.A+T.B+T.C - IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C)
                  < IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C) THEN 'Not A Triangle'  
             WHEN T.A = T.B AND T.B = T.C THEN 'Equilateral'
             WHEN T.A = T.B OR T.B = T.C OR T.A = T.C THEN 'Isosceles'       
             ELSE 'Scalene' END) AS triangle
FROM TRIANGLES T

방법은 여러가지가 있겠지만 그나마 가장 익숙한 CASE함수를 사용해 쿼리문을 작성했다.

그런데 결과는 실패!

 

실패도 실패인데, 일단 첫번째 WHEN 구문부터 엉망이다.

저렇게 쓰는게 아닐건데 라는 생각이 마구 든다....

 

원인은 의외로 간단했는데, 그건 내 수학실력도 엉망이었기 때문이다.

삼각형이 아닌 조건에서 가장 큰 변이 나머지 두 변의 길이의 합보다 크거나 같을 때인데,

저기서 같거나 조건을 쓰지 않았다. 

 

부끄럽네...

 

 

 

반응형

댓글