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.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
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 A = C OR B = C THEN 'Isosceles'
ELSE 'Scalene'
END)
FROM TRIANGLES;
⭐ 표시가 된 부분에 주목하자.
10 10 10 Equilateral
11 11 11 Equilateral
30 32 30 Isosceles
40 40 40 Equilateral
20 20 21 Isosceles
21 21 21 Equilateral
20 22 21 Scalene
20 20 40 Not A Triangle ⭐
20 22 21 Scalene
30 32 41 Scalene
50 22 51 Scalene
20 12 61 Not A Triangle
20 22 50 Not A Triangle
50 52 51 Scalene
80 80 80 Equilateral
💻 오답
SELECT
(CASE
WHEN A = B AND B = C THEN 'Equilateral'
WHEN A = B OR A = C OR B = C THEN 'Isosceles'
WHEN A + B <= C OR B + C <= A OR A + C <= B THEN 'Not A Triangle'
ELSE 'Scalene'
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 A = C OR B = C THEN 'Isosceles'
ELSE 'Scalene'
END)
FROM TRIANGLES;
위의 두 코드는 ⭐ 표시가 된 부분(20, 20, 40)
에 대해 서로 다른 결과를 출력한다.
- 오답 코드는
Isosceles
라고 출력- 정답 코드는
Not A Triangle
라고 출력
왜 그럴까 ❓
(20, 20, 40)
은 A = B
이므로 Isosceles
조건에 만족하지만, A + B <= C
조건에 해당하므로 Not A Triangle
으로 분류되어야 한다.
즉, 2개의 변의 길이가 같더라도 Not A Triangle
일 수 있음에 주의한다 ❗
Isosceles
에 대한 조건 탐색을 먼저 해버리면 Not A Triangle
인 경우에도 2개의 변의 길이만 같다면 Isosceles
로 분류되어버린다.
Not A Triangle
가 아니라는 조건하에 Isosceles
조건에 부합하는지를 탐색하도록 Not A Triangle
조건이 먼저 입력되어야 한다.