본문 바로가기

코딩일기

SQL 코드카타 108 - Triangle Judgement

https://leetcode.com/problems/triangle-judgement/description/

 

Column Name Type
x int
y int
z int

 

Triangle 테이블:

 

  • 각 행은 세 선분의 길이입니다.

세 선분이 삼각형을 이룰 수 있다면 Yes, 아니라면 No를 반환하세요.

 

세 선분이 삼각형을 이루기 위해서는 가장 큰 선분의 길이가 나머지 두 선분의 길이보다 작아야한다. 따라서 x, y, z중 가장 긴 열의 길이가 나머지 두 열의 합보다 작아야한다.

 

열 간의 숫자 비교는 max()를 사용할 수 없었기 때문에 검색을 통해서 Greatest()를 찾아서 사용했다. 그리고 가장 큰 숫자를 찾는 것은 쉬워도 나머지 두 숫자를 걸러내는 것은 또 다른 문제였기 때문에 x, y, z를 전부 더하고 가장 큰 수를 빼주는 방법으로 나머지 두 숫자의 합을 구했다. 따라서 x + y + z - 가장큰수 > 가장큰수 가 Ture일 경우 삼각형을 이룰 수 있는데 이항을 통해서 식을 간소화했다.

select
    x,
    y,
    z,
    case
        when (x + y + z) > GREATEST(x, y, z) * 2 then 'Yes'
        else 'No'
    end triangle
from Triangle

성공!

Greatest()는 이번에 처음 알게되었다.

sql문제라기보다는 알고리즘 문제라는 느낌이 강하게 들었던 문제였다.