class="layout-aside-right paging-number">
본문 바로가기
TIL

[TIL169] HackerRank - Type of Triangle

by heestory323 2026. 6. 24.

문제 설명

HackerRank의 Triangle 문제를 풀면서 삼각형의 종류를 분류해야 했다.

조건은 다음과 같았다.

  • Equilateral : 세 변의 길이가 모두 같음
  • Isosceles : 두 변의 길이가 같음
  • Scalene : 세 변의 길이가 모두 다름
  • Not A Triangle : 삼각형이 성립하지 않음

처음에는 단순히 CASE WHEN으로 조건을 나열하면 된다고 생각했다.

하지만 예상과 다른 결과가 나왔고, CASE WHEN이 동작하는 순서를 정확히 이해하지 못했다는 것을 깨달았다.


내가 처음 생각한 접근

나는 먼저 삼각형이 성립하는지 검사한 뒤,

a=b OR b=c OR a=c

이면 Isosceles,

a=b AND b=c

이면 Equilateral

이라고 작성했다.

생각하기에는

두 변이 같으면 Isosceles

세 변이 같으면 Equilateral

이니까 문제가 없어 보였다.


내가 헷갈렸던 부분

왜 Equilateral이 아니라 Isosceles가 나왔을까?

내가 작성한 조건은 아래와 비슷했다.

CASE
    WHEN a=b OR b=c OR a=c
        THEN 'Isosceles'

    WHEN a=b AND b=c
        THEN 'Equilateral'
END

여기서

a = 3
b = 3
c = 3

을 넣어보자.

그러면

a=b OR b=c OR a=c

는 TRUE이다.

 

하지만 CASE WHEN은 위에서부터 검사하기 때문에

Isosceles 반환

↓

종료

↓

Equilateral 검사 안 함

이 된다.

 

나는 처음에

Equilateral은 세 변이 같은 경우니까

당연히 아래 조건까지 내려가서 검사하겠지

라고 생각했다.

 

 

하지만 CASE WHEN은

처음 TRUE가 되는 조건에서 종료

된다는 점을 놓치고 있었다.


CASE WHEN은 모든 조건을 검사하지 않는다

내가 가장 크게 배운 부분이다.

CASE WHEN은

IF문 여러 개

가 아니라

IF → ELSE IF → ELSE IF

처럼 동작한다.

위 조건이 TRUE

↓

즉시 결과 반환

↓

아래 조건은 무시

된다.


최종 해결 방법

조건의 포함 관계를 먼저 생각했다.

현재 조건을 보면

- Equilateral : 세 변이 모두 같음

- Isosceles : 두 변 이상 같음

이다.

 

Equilateral ⊂ Isosceles

관계가 성립한다.

 

따라서

더 좁고 구체적인 조건인 Equilateral 을 먼저 검사해야한다.


조건 순서는

삼각형 성립 여부 확인

↓

세 변 모두 같은가?

↓

두 변 같은가?

↓

세 변 모두 다른가?

가 되어야 한다.


정답 쿼리

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 b=c OR a=c
    THEN 'Isosceles'

    ELSE 'Scalene'
END
FROM triangles;

핵심 SQL 개념 정리

CASE WHEN 평가 순서

문제 상황

삼각형 종류를 분류해야 했다.

 

왜 필요한가

조건마다 다른 결과를 반환해야 하기 때문이다.

 

어떻게 동작하는가

위에서부터 순서대로 검사

↓

처음 TRUE가 되는 조건 반환

↓

아래 조건은 검사하지 않음

조건의 포함 관계

더 구체적인 조건

↓

더 일반적인 조건

순으로 작성해야 한다.


이번 문제에서 배운 패턴

내 생각

CASE WHEN 순서는 상관없을 것 같음

Equilateral이 Isosceles로 분류됨

CASE WHEN은 첫 TRUE에서 종료됨을 발견

조건 간 포함 관계 확인

구체적인 조건 먼저 배치

정답


한 줄 요약

CASE WHEN은 위에서부터 순서대로 평가되므로, 조건 간 포함 관계가 있다면 더 구체적이고 좁은 조건을 먼저 작성해야 한다.