[mySQL] 해커랭크 Type of Triangle

sehyunny·2023년 4월 12일
0

mySQL

목록 보기
3/26

https://www.hackerrank.com/challenges/what-type-of-triangle/problem?h_r=internal-search

맨 처음 시도

SELECT CASE
        WHEN A = B = C THEN 'Equilateral'
        WHEN A = B OR B = C OR A = C THEN 'Isosceles'
        WHEN A + B < C OR A + C < B OR C + B < A THEN 'Not A Triangle'
        WHEN A /= B /= C THEN 'Scalene'
       END, *
FROM TRIANGLES

A = B AND B = C 대신 A = B = C와 같이 사용할 수 없음을 알게 되었다!
두 가지 이상의 조건을 적을 때는 AND 또는 OR 연산자를 이용해 연결해야 한다.

CASE 조건문을 쓸 때는 '작성 순서'에 유의해야 한다.
문제에 제시된 삼각형의 정의 및 구분은 아래와 같음

  1. 세 변이 모두 같으면 Equilateral
  2. 두 변이 같으면 Isosceles
  3. 세 변이 모두 다르면 'Scalene'
  4. 삼각형이 될 수 있는 조건을 만족하지 못하면 'Not A Triangle'

CASE 조건문은 작성 순서에 따라 순차적으로 처리가 된다.
만약 첫번째 조건에서 A로 필터링이 되었다면, 두번째 조건을 만족하더라도 계속해서 A로 남는다.

만약 세 변이 (3, 3, 3)인 삼각형이 있다고 했을 때,
이등변 삼각형의 조건인 '두 변이 같다'도 충족하므로
위 조건을 먼저 작성할 경우 '이등변 삼각형'으로 필터링 된다.

SELECT CASE
			WHEN A = B OR B = C OR A = C THEN 'Isosceles'
            WHEN A = B AND B = C THEN 'Equilateral'
            ELSE 'Others'
       END
FROM Triangles

-> 세 변이 (3,3,3)인 삼각형은 먼저 걸린 조건을 만족하므로 Isosceles로 구분된다.

따라서 아래와 같이
(1)정삼각형을 먼저 조건에 걸고, (2)이등변 삼각형의 조건을 걸어주면 된다.

SELECT CASE
			WHEN A = B AND B = C THEN 'Equilateral'
            WHEN A = B OR B = C OR A = C THEN 'Isosceles'
            ELSE 'Others'
       END
FROM Triangles

그 다음으로 세 변이 (20, 20, 40)인 삼각형이 있다고 했을 때,
이등변 삼각형의 조건인 '두 변이 같다'를 충족하지만
삼각형이 될 수 있는 조건을 만족하지 못한다. -> 따라서 이 조건을 먼저 걸어줘야 함!!!
(두 변의 합이 나머지 한 변보다 작거나 같을 때 삼각형이 될 수 없음)

따라서 문제에서 원하는 조건을 위한 순서를 작성해보자면 아래와 같다
1. 정삼각형 먼저
2. 삼각형이 될 수 없는 경우
3. 이등변 삼각형
4. 나머지는 그냥 삼각형으로 구분

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 B = C OR A = C THEN 'Isosceles'
            ELSE 'Scalene'
       END
FROM Triangles

TIPS

  • 쿼리를 작성하기 전에 SELECT * FROM 테이블을 통해 테이블의 전체 구조 및 데이터를 한번 확인해보는 습관을 가지자. 이해가 빨라진다.

그런데!!!!!!!! 문제가 있다
이렇게 쿼리를 써서 냈는데 (뭐가 잘못됐나 싶어서 계속 다시보고 강사님이 수업에서 쓰신 코드랑 똑!!같!!이!! 씀)
계속 오류가 남....ㅋ

무엇이 문제인지 알 수가 없어서 몇 번이고 다시 쳐봤고
혹시 탭 버튼을 사용하면 안되는건가 하고 별 생각을 다해봄 ㅋㅋㅋㅋㅋ
하지만 아직도 원인을 알 수 없다...

결국 슬랙에 질문을 남겼는데 바로 위에 보니까 나와 같은 문제를 갖고 계신 분이 계셨다 ㅠㅠ
우선은 답변을 기다려보고 다음 문제로 넘어가야겠다

+
선생님께 답변을 받기로, '해커랭크에서 CASE문과 같이 직접 가공한 컬럼에 alias로 별칭을 주지 않으면 작동하지 않도록 시스템을 구축, 강의 촬영 시점과 달라진 부분인 것 같다'고 해주셨다.
결론적으로 SELECT CASE WHEN ~ END AS A로 작성해보라고 하셨음

그래서, 아래와 같은 코드로 다시 시도했더니 아주 잘 된다.

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 B = C OR A = C THEN 'Isosceles'
            ELSE 'Scalene'
            END AS A
FROM Triangles

0개의 댓글