작성일 :

문제 링크

9366 - 삼각형 분류

설명

세 개의 길이가 주어졌을 때,

삼각형을 만들 수 있는지, 만들 수 있다면 삼각형의 종류는 무엇인지를 분류하는 문제입니다.


삼각형을 구성하기 위해서는 가장 긴 변의 길이가 나머지 두 변의 길이 합보다 작아야 하며,

이 조건이 성립하지 않으면 삼각형이 될 수 없습니다.


삼각형이 되는 경우는 다음 세 가지 중 하나로 분류됩니다:

  • 정삼각형 (equilateral): 세 변의 길이가 모두 같은 경우
  • 이등변삼각형 (isosceles): 두 변의 길이만 같은 경우
  • 부등변삼각형 (scalene): 세 변의 길이가 모두 다른 경우


접근법

  • 테스트케이스의 개수를 먼저 입력받습니다.
  • 각 테스트마다 세 변의 길이를 입력받습니다.
  • 세 변을 비교하기 위해 오름차순으로 정렬합니다.
  • 정렬된 순서로 삼각형이 가능한지 판별합니다:
    • 가장 긴 변의 길이보다 앞의 두 변의 합이 작거나 같다면 삼각형 불가"invalid!"
  • 삼각형이 가능한 경우, 다음 기준에 따라 종류를 분류합니다:
    • 세 변이 모두 같다면 "equilateral"
    • 두 변만 같다면 "isosceles"
    • 모두 다르다면 "scalene"


각 테스트케이스는 "Case #x: 결과" 형식으로 출력해야 하며, 번호는 1부터 시작합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Linq;

class Program {
  static void Main() {
    int t = int.Parse(Console.ReadLine());
    for (int i = 1; i <= t; i++) {
      var s = Console.ReadLine().Split().Select(int.Parse).ToArray();
      Array.Sort(s);

      string result = s[0] + s[1] <= s[2] ? "invalid!" :
                      s[0] == s[1] && s[1] == s[2] ? "equilateral" :
                      s[0] == s[1] || s[1] == s[2] ? "isosceles" : "scalene";

      Console.WriteLine($"Case #{i}: {result}");
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;

bool isTri(int a, int b, int c) {
  return a + b > c;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int t; cin >> t;
  for (int i = 1; i <= t; i++) {
    int s[3]; cin >> s[0] >> s[1] >> s[2];
    sort(s, s + 3);

    string ans = !isTri(s[0], s[1], s[2]) ? "invalid!" :
                 s[0] == s[1] && s[1] == s[2] ? "equilateral" :
                 s[0] == s[1] || s[1] == s[2] ? "isosceles" : "scalene";

    cout << "Case #" << i << ": " << ans << "\n";
  }

  return 0;
}