SQL/HackerRank(해커랭크)

HackerRank(해커랭크) MySQL Type of Triangle 문제 답

진리뷰 2023. 10. 11. 09:00
반응형

 

 

HackerRank(해커랭크)-MySQL-Type-of-Triangle-문제-답-썸네일
Type of Triangle

 

 

*MySQL 버전, advanced select 문제입니다.

 

 

 

해커랭크 Type of Triangle 문제, 샘플, 설명

 

  • TRIANGLES 테이블 레코드의 삼각형 타입을 구분하는 쿼리 작성하기.
  • 세 변의 길이를 담은 테이블 TRIANGELS.
  • Equilateral: 정삼각형, 세 변 길이 모두 같음
  • Isosceles: 이등변삼각형, 두 변 길이 같음
  • Scalene: 삼각형, 세 변 길이 모두 다름
  • Not A Triangle: 삼각형 아님

 

해커랭크-type-of-triangle-문제
Type of Triangle 문제

 

 

대충 A, B, C가 각 변의 길이 데이터를 담고 있음을 보이며, 삼각형 종류를 설명하고 있다.

이때 (13, 14, 30)은 변 A, B의 합이 변 C보다 작아서 삼각형이 아니다.

 

해커랭크-type-of-triangle-문제-샘플-설명
Type of Triangle 샘플, 설명

 

 

 

해커랭크 Type of Triangle 답

 

  • CASE WHEN, 비교 연산자 사용

조건별로 구분할 것이 여럿이기 때문.

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

 

 

 

추가 정리

 

  • CASE WHEN 조건식 입력 순서 유의

CASE WHEN은 조건식 입력 순서대로 T/F를 판단한다.

CASE WHEN 조건식 1에서 먼저 T/F를 판단 후, 그중 F인 데이터를 대상으로 두 번째 WHEN 조건식 2에서 다시 T/F를 판단한다. 그러므로 각 조건식들의 순서를 고려할 때, '조건들이 충돌하는가?'를 확인해야 한다.

 

해당 문제도 이 점을 유의해야 한다.

아래처럼 Not A Triangle을 세 번째 조건식으로 작성하면,  Isosceles와 충돌하기에 오답이다.

 

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 A+C <= B OR B+C <= A THEN 'Not A Triangle'
ELSE 'Scalene'
END
FROM TRIANGLES;

 

먼저 두 변이 같은 값들만  Isosceles로 판단하고 이 외 값들은 다음 조건식으로 넘어가서 판단된다.

A != B, A!=C, B!=C 같은 데이터를 대상으로 Not A Triangle인지 판단한다.

 

하지만 여기서 충돌이 발생한다.

A+B <= C를 예로 들면, A!=B 뿐만 아니라 A=B도 A+B <= C일 수 있기에 부정확한 분류가 될 수 있다.

다시 말해 Isosceles의 조건식보다  Not A Triangle의 조건식이 더 포괄적이다.

그래서 Not A Triangle의 조건식보다  Isosceles의 조건식을  먼저 쓰면 오답이다.

 


 

작성하기 쉬운 순서대로 입력하다가 오답 처리되었는데..CASE WHEN을 막 입력하면 무서운 결과가 발생할 수 있음을 다시 깨닫게 한 문제이다.

반응형
top