본문 바로가기
PS/SQL

[HackerRank] Type of Triangle

by 행복한라이언 2024. 4. 10.
728x90
반응형

문제링크

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

1. 핵심

  • CASE 문
CASE 
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END AS 컬럼

 

  • 파이썬에서 'if-elif 문'과 동일한 구조이다. 조건1 확인 후에 조건2로 넘어가며 조건1의 상태는 값1로 출력이 되며, when문 안에서 만족하지 못하면 else의 값이 나온다.
  • 그래서 조건을 잘 설정해야지 코드가 안 길어진다. 이 문제의 예시를 보자.
  • 이 문제의 경우 세 변의 길이가 주어지고 이를 (정삼각형, 이등변삼각형, 그 외의 일반삼각형, 삼각형이 아닌 경우) 4가지 타입 중 해당하는 값을 출력하는 문제이다.
    • 2번 코드에서 보면 "정삼각형 판단 > 이등변삼각형 판단 > 일반삼각형 판단 > 그 외는 삼각형아님"으로 판단하고 있다. 이 문제에서 주의할 점이 이등변삼각형이다. 이등변삼각형 때 두 변의 길이가 같다는 것만 신경 쓰게 되면 삼각형의 성립조건이 아닐 때를 놓칠 수 있다.
    • 틀린이유1: 삼각형이 만들어질 수 있는 조건은 두 변의 길이의 합이 나머지 한 변의 길이보다 반드시 커야한다. 예를 들어 10 10 50 이라는 세 변이 주어지면 당연히 삼각형이 아니다. 따라서 이등변삼각형도 삼각형 조건을 반드시 충족해야한다.
    • 틀린이유2: 괄호를 사용하지 않았다. 'A = B  or A = C or B = C and A + B > C and A + C > B and B + C > A' 이렇게 하면 당연히 오답이다. 우리가 원하는 방향은 (A = B  or A = C or B = C)  and (A + B > C and A + C > B and B + C > A) 이렇게 되어야한다. 따라서 우리가 원하는 조건에 맞도록 괄호를 반드시 적절하게 사용한다.
  • 삼각형 판단하는 방법을 바꾸면 코드는 간단해진다.
    • 기존: 정삼각형 판단 > 이등변삼각형 판단 > 일반삼각형 판단 > 그 외는 삼각형아님
    • 개선: 삼각형 아님 > 정삼각형 판단 > 이등변 삼각형 판단 > 그 외 일반 삼각형
    • 개선점이 더 유리한 이유: 삼각형이 아님을 먼저 판단함으로써 다음 조건들은 무조건 삼각형 조건을 만족하게 된다.

2. 코드(MySQL)

# 개선 전 : 정삼각형 > 이등변 삼각형 > 일반삼각형 > 삼각형아님
select 
         case 
                when A = B and  B = C  then 'Equilateral'
                when (A = B  or A = C or B = C)  and (A + B > C and A + C > B and B + C > A)   then 'Isosceles'
                when A + B > C and A + C > B and B + C > A  then 'Scalene'
                else 'Not A Triangle'
         end                                           
from TRIANGLES

# 개선 후 : 삼각형아님 > 정삼각형 > 이등변삼각형 > 일반삼각형

select 
         case 
                when A + B <= C or A + C <= B or B + C <= A then 'Not A Triangle'
                when A = B and  B = C  then 'Equilateral'
                when A = B  or A = C or B = C  then 'Isosceles'
                else 'Scalene'
         end                                           
from TRIANGLES
728x90
반응형

'PS > SQL' 카테고리의 다른 글

[HackerRank] Top Earners  (0) 2024.04.24
[HackerRank] The Blunder  (0) 2024.04.23
[HackerRank] Higher Than 75 Marks  (0) 2024.04.08
[HackerRank] Weather Observation Station 5  (0) 2024.04.06
[SQL] 오랜 기간 보호한 동물(2)  (0) 2024.02.17