문제
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
- 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 length.
- Not a Triangle : The given values of A, B and C don't form a triangle.
문제해석
- Equilateral : 세 변의 길이가 같을 때 → 정삼각형
- Isosceles : 두 변의 길이가 같을 때 (나머지 한 변의 길이만 다름) → 이등변 삼각형
- Scalene : 세 변의 길이가 모두 다를 때 → 그냥 삼각형
- Not a Triangle : 두 변의 길이 합이 제일 긴 한 변의 길이보다 '같거나 작으면' 삼각형이 아님
- ex) a = 13, b = 14, c = 30
- 13 + 14 < 30
- 따라서, 삼각형이 아님
- 세 변의 길이가 같지 않은 이상, 두 변의 길이 합은 제일 긴 변의 길이보다 커야함
테이블
TRIANGLES |
![]() |
풀이과정
1 2 3 4 5 6 7 | SELECT CASE WHEN A+B<=C OR B+C<=A OR C+A<=B THEN 'Not A Triangle' WHEN A=B AND B=C AND C=A THEN 'Equilateral' WHEN A<>B AND B<>C AND C<>A THEN 'Scalene' ELSE 'Isosceles' END FROM TRIANGLES | cs |
(1) CASE문 실행 순서에 따라
가장 첫 번째 WHEN문에는 가장 포괄적인 조건을 주고, 점차 지엽적인 조건을 써줘야 함
먼저 삼각형인지 아닌지를 분류할 수 있는 삼각형 판변 조건을 적어줌
(2) 'Not a Triangle' 조건문에 OR 를 사용해 A, B, C 세 변 사이의 관계 케이스를 넣어줌
- A + B가 C보다 작거나 같거나
- B + C가 A보다 작거나 같거나
- C + A가 B보가 작거나 같으면 → 삼각형이 아니다.

+ 다른 풀이
1 2 3 4 5 | SELECT (CASE WHEN NOT(A + B > C AND B + C > A AND C + A > B) THEN "Not A Triangle" WHEN A = B and B = C THEN "Equilateral" WHEN A = B or B = C or C = A THEN "Isosceles" ELSE "Scalene" END) FROM Triangles; | cs |
삼각형 판별 조건에 NOT( 조건1 AND 조건2 AND 조건3) 을 사용함
- A + B가 C보다 크고,
- B + C가 A보다 크고,
- C + A가 B보다 큰 경우가 아닐 때(NOT) → 삼각형이 아니다.
- NOT 연산자는 조건이 FALSE인 경우 출력함
- 조건1, 조건2, 조건3 을 차례대로 실행했을 때 만족하지 않은 조건이 있으면 출력함
- ex) A = 30, B = 13, C = 14
- 조건1인 A + B > C 는 True 였으나 조건2인 B + C > A가 FALSE로 판명되면
AND 연산자로 이어져있기 때문에 전체는 FALSE가 됨 → 'Not A Triangle'이 출력
+ 다른 풀이
1 2 3 4 5 | SELECT IF(A+B+C <= 2*GREATEST(A,B,C),"Not A Triangle", IF(A=B and B=C,"Equilateral", IF(A=B or B=C or C=A,"Isosceles","Scalene"))) FROM Triangles; | cs |
수학적 지식을 사용함
- 삼각형이 아니면, 세 변을 모두 더한 값 <= (2 * 세 변 중 가장 긴 길이)
- 정삼각형의 경우, A=B 이고 B=C이면 C=A이므로 앞의 두 조건만 적어준 것 굿~
- 이등변 삼각형의 조건을 충족하지 않으면 그냥 삼각형인 것
배운점
▶ CASE문
- SELECT 뒤에 컬럼명 없이 바로 CASE문을 써도 된다는 것
- CASE 뒤에 컬럼명 없이 바로 WHEN 써도 된다는 것
- CASE WHEN 조건이 처음부터 차례대로 실행되기 때문에 첫 조건은 포괄적인 것부터 적어줘야 된다는 것
- A=B=C 이렇게 적으면 에러남. A=B AND B=C AND C=A 이렇게 따로 적어줘야 된다는 것
https://jaehwaseo.tistory.com/10
[MySQL] CASE 문 : 조건에 따라 값 정하기 (CASE WHEN THEN END)
CASE WHEN THEN ELSE END SQL 문제를 풀다 보면 CASE에 따라 조건을 나눠서 출력하라는 것을 종종 볼 수 있다. 그럴 경우 사용해주면 유용하다. 우선 기본적인 형태부터 보고 가자. SELECT CASE WHEN(조건A) THEN
jaehwaseo.tistory.com
▶ NOT 연산자 (+@ IN연산자)
- WHEN (A+B < C) AND (B+C < A) AND (C+A < B) THEN 'Not A Triangle' 이렇게 적으면 에러남
- 세 조건 모두를 만족하는 경우에만 Not A Triangle을 출력하기 때문
- 이럴 때는 하나라도 FALSE면 Not A Triangle이 출력되도록 NOT 연산자 써주기
- (참고) IN 연산자를 사용하면 OR의 효과가 있음
- ex) (Fruit = 'banana') OR (Fruit = 'strawberry') 이렇게 쓰는 것과
- Fruit IN( ('banana', 'strawberry') 이렇게 쓰는 게 같은 결과물을 출력함
https://www.joinc.co.kr/w/mysql_AND_OR_NOT
MySQL AND, OR, NOT 연산자
MySQL의 SELECT statement는 몇 개의 절을 포함하고 있다. 그 중에서 WHERE 절(Clause)은 특정 조건으로 레코드를 필터링할 때 사용한다. 이때 한 가지 이상의 조건을 조합해서 사용 해야 하는 경우가 있는
www.joinc.co.kr
댓글