SQL/SQL 문제
[HackerRank] Type of Triangle
Lim Seung Hyun
2021. 11. 30. 15:55
문제 : https://www.hackerrank.com/challenges/what-type-of-triangle/problem?isFullScreen=true
Type of Triangle | HackerRank
Query a triangle's type based on its side lengths.
www.hackerrank.com
문제 해설
- TRIANGLES 테이블의 A, B, C에 조건을 이용하여 어떤 유형인지 출력하기
- Equilateral : 3변의 길이가 모두 같을시
- Isosceles : 2변의 길이가 같을시
- Scalene : 3변의 길이가 모두 다를시
- Not A Triangle : 삼각형의 형태가 될 수 없을시 (A + B <= C)
나의 풀이 (MySQL)
SELECT
CASE
WHEN A + B <= C THEN "Not A Triangle"
WHEN A != B AND B != C AND A != C THEN "Scalene"
WHEN A = B AND B = C THEN "Equilateral"
WHEN A = B OR A = C OR B = C THEN "Isosceles"
END
FROM TRIANGLES
- CASE WHEN : if 문처럼 조건을 두어 값을 처리
CASE
WHEN 조건 THEN 값 END
--> 조건에 맞으면 값을 리턴 아니면 NULL 리턴
- CASE WHEN은 중첩으로 하여 IF-ELSE 처럼 사용 가능
CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
...
END
--> 조건1에 맞으면 값1 리턴 아니면 조건2로 넘어감, 조건2가 맞으면 값2 리턴 아니면 다음 조건으로 넘어감. 마지막까지 조건에 걸리지 않는다면 NULL 리턴
- 조건의 순서에서 고려해야하는 점
- 값 중에 A = 20, B = 20, C = 40가 있는데
- WHEN A = B OR A = C OR B = C THEN "Isosceles"
WHEN A + B <= C THEN "Not A Triangle" - 예상하는 결과는 Not A Triangle이지만 위의 순서대로 작성하면 Isosceles가 리턴됨
- > Isosceles에 대한 조건보다 Not A Triangle에 대한 조건이 우선적으로 처리가 되어야 한다.
- WHEN A = B OR A = C OR B = C THEN "Isosceles"
- 값 중에 A = 40, B = 40, C = 40이 있는데
- WHEN A = B OR A = C OR B = C THEN "Isosceles"
WHEN A = B AND B = C THEN "Equilateral" - 예상하는 결과는 Equilateral이지만 위의 순서대로 작성하면 Isosceles가 리턴됨
- > Isosceles의 조건보단 Equilateral에 대한 조건이 우선적으로 처리가 되어야 한다.
- WHEN A = B OR A = C OR B = C THEN "Isosceles"
- 값 중에 A = 20, B = 20, C = 40가 있는데
728x90