녕녀기의 실험일지

[ Oracle ] 삼각형 분류하기 본문

-- Data --/- SQL -

[ Oracle ] 삼각형 분류하기

녕녀기 2024. 2. 22. 11:07

본문으로

 

안녕하세요. 녀기입니다.

 

헤헤

 

바로 돌아왔습니다.

 

sql 코테 너무 어려운 것ㅋㅋㅋㅋ

 

 

 

이번 문제는 '삼각형을 분류하기' 입니다.

 

각 변의 길이가 나와있고

 

정삼각형인지, 이등변인지, 아니면 삼각형이 아닌지 등을 분류해야 합니다.

 

 

 

가장 긴 변을 찾고, 나머지 변을 통해 계산하려 했지만

 

이는 말이 안 되는 방법이어서

 

검색을 해 보니

 

바로 대안이 나왔습니다ㅋㅋㅋㅋㅋ

 

삼각형이 아닌 것만 찾으면 나머지는 쉽더라구요.

 

 

 

바로 들어가보겠습니다!!


삼각형 분류

select
case 
    when (a+b) <= c or (a+c) <= b or (c+b) <= a then 'Not A Triangle'
    when a = b and b = c then 'Equilateral'
    when a != b and b != c and c != a then 'Scalene'
    else 'Isosceles'
    end
from triangles

 

삼각형이 정의가 되려면

 

'가장 긴 변을 제외한 두 변을 더한 값이, 가장 긴 변보다 길어야 한다.'

 

라는 조건이 있습니다. 

 

위 조건을 만족하지 못하면, 삼각형이 아닌 것입니다.

 

 

 

그렇다면 처음으로 삼각형이 아닌 데이터부터 정의합니다.

 

a, b, c 컬럼 중 어떤 값이 가장 큰 값이 알지 못하므로

 

(사실 알 수 있습니다. greatest() 함수 사용하면 됩니다.)

 

3개의 변 중 2개를 추출해서 더한 값이, 남은 한 변보다 작거나 같으면 삼각형이 아닌 것입니다.

 

3번만 해 보면 되기 때문에 간단합니다.( 3C2 = 3 * 2 / 2 * 1 )

 

CASE 절에 첫 번째에 정의해 줍니다(코드 블럭 참조).

 

 

 

두 번째는 정삼각형을 정의해 줍니다.

 

정삼각형을 먼저 정의하는 이유는 삼각형 정의 중 가장 작은 영역이기 때문입니다.

 

a = b 가 같고, b = c 가 같으면 정삼각형 입니다.

 

a = c 는 정의할 필요가 없습니다.

 

 

 

그 다음 가장 큰 단위의 삼각형을 정의합니다.

 

이등변 삼각형이 그냥 삼각형의 부분 집합이지만,

 

이등변 삼각형을 정의하려면 길이가 같은 두 변이 있는지 부터 확인해야 하기 때문에

 

힘들 것이라고 생각이 듭니다.

 

(방법이 있다면 누군가 댓글로 알려주세요.

 

사랑으로 보답하겠습니다.)

 

각 변의 길이가 전부 다르면 삼각형이 될 것입니다.

 

여기서는 

 

a != b and b != c and c != a

 

를 확인해야 합니다.

 

a랑 c가 같으면서 b와는 다를 수 있기 때문이죠!

 

 

 

마지막으로 ELSE 조건에 이등변 삼각형을 넣어주면

 

삼각형을 분류할 수 있습니다.


삼각형이 아닌 조건만 찾으면 나머지는 호다닥 찾을 수 있는 문제였습니다....

 

왜 처음에 저 생각을 못했을까요?

 

수학 공부 나름 열심히 했는데...ㅎㅎㅎㅎ

 

과거로 회귀해야 하나(?)

 

쨌든 풀었으니 된거죠?

 

(뻔뻔)

 

다시 연습하러 가볼게요~~

뿅!

Comments