해당 문제는 HackerRank에서 사용한 문제이며 모든 테이블의 자료와 출처는 Hackerank임을 밝힙니다.
해당 글에서는 CASE를 사용하여 푸는 문제로 그래도 처음 푸는 사람에게는 난이도가 있는 문제인 것 같습니다.
해당 문제 원본을 확인 하시려면 해당 사이트를 들어가시면 될 것 같습니다.
시작하겠습니다
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.
(삼각형 표의 각 레코드의 세 변 길이를 사용하여 각 레코드의 유형을 식별하는 쿼리를 작성합니다.
표의 각 레코드에 대해 다음 중 하나를 출력합니다
Equilateral: 같은 길이의 변을 가진 삼각형입니다.
Isosceles: 같은 길이의 변을 가진 삼각형입니다.
Scalene: 길이가 다른 변을 가진 삼각형입니다.
Not A Triangle: 주어진 A, B, C 값은 삼각형을 형성하지 않습니다.)
이 문제에서 중요한 것은 삼각형이 될 수 있는 조건입니다. 삼각형이 될 수 있는 조건은 많이 들어봤을 것입니다.
두 변의 합이 나머지 한 변 보다 커야한다!! 라는 조건입니다. 이 조건을 알면 쉽게 푸실 수 있을 것입니다.
출력을 할 때 해당 조건에 만족하는 삼각형을 출력하면 되는 것 같습니다.
1. Triangles 테이블 확인하기
A, B, C 컬럼으로 구성된 것을 확인 하실 수 있습니다.
2. Equilateral에 맞는 조건 넣기
우선 Equilateral는 모든 변이 동일할 경우에 사용할 수 있습니다. 그럼 조건 또한 모든 A,B,C가 같을 경우로 넣어 주면 될 것 같습니다.
select *, CASE
WHEN A = B and B = C THEN 'Equilateral' # Equilateral 조건
from Triangles
위의 사진과 같이 세 변이 동일한 경우 Equilateral을 출력하는 것을 보실 수 있습니다.
3. Isosceles에 맞는 조건 추가하기
Isosceles는 두 변이 같은 경우에 사용할 수 있습니다. 조건을 그럼 OR를 사용하면 될 것 같습니다.
select *, CASE
WHEN A = B and B = C THEN 'Equilateral'
WHEN A = B or B = C or A = C THEN 'Isosceles'
END
from Triangles
코드 결과를 보시면 두 변이 같으므로 제대로 출력 된 것으로 보입니다.
하지만 여기서 맨 마지막 행을 보시면 삼각형이 되는 조건에 맞지 않는 것으로 확인이 됩니다.
그렇다면 먼저 삼각형이 안되는 것들 부터 설정을 하는 것이 맞을 것 같습니다.
여기서 알아야 할 것이 있습니다. CASE 문은 하나의 행이 조건에 맞을 경우 아래에 설정되어 있는 조건들은 모두 무시하고 해당 조건에 맞는 값으로 설정 됩니다.
만약 하나의 행이 CASE의 위, 아래 조건 둘 다 만족한다면 결국 위의 조건에 맞는 값으로 출력이 되게 됩니다.
4. 삼각형이 아닌 조건을 Isosceles 조건 위에 추가하기
select *, CASE
WHEN A = B and B = 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'
END
from Triangles
이와 같이 Not A Triangle로 잘 출력된 것을 확인 할 수 있습니다.
5. ELSE 문 사용하여 Scalene 설정하기
select CASE
WHEN A = B and B = 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'
ELSE 'Scalene'
END
from Triangles
ELSE를 통해 나머지들은 Scalene로 설정해주면 정답이 됩니다!!
이상으로 Hacker Rank 문제 풀이를 마치도록 하겠습니다.
'Data Analyst > SQL' 카테고리의 다른 글
[SQL] SELF JOIN 사용하여 문제 풀기 (Rising Temperature) (0) | 2024.10.14 |
---|---|
[SQL] INNER JOIN 사용하여 문제 풀기 (Type of Triangle) (0) | 2024.10.11 |
[SQL] GROUP BY 사용하여 문제풀기 (Top Earners) (0) | 2024.10.09 |
SQL - Window Function (RANK, DENSE_RANK, LAG, LEAD) (1) | 2024.09.25 |
SQL - Window Functions (ROW_NUMBER) (0) | 2024.09.20 |