작성일 :

문제 링크

5073번 - 삼각형과 세 변

설명

세 변의 길이를 통해 삼각형이 가능한지 판별하고, 그에 따라 삼각형의 종류를 판단하는 조건 분기 문제입니다.

  • 세 변의 길이를 입력받아, 삼각형이 될 수 있는 조건을 만족하는지 확인해야 합니다.
  • 삼각형이 되기 위해서는 가장 긴 변의 길이가 나머지 두 변의 합보다 작아야 합니다.
  • 삼각형이 될 수 있다면, 변의 길이에 따라 세 가지 중 하나로 분류합니다:
    • 세 변이 모두 같으면 Equilateral
    • 두 변만 같으면 Isosceles
    • 모두 다르면 Scalene
  • 세 변이 모두 0인 경우 입력이 종료됩니다.

접근법

  • 3개의 정수를 입력받아 리스트 형태로 저장하고, 오름차순 정렬합니다.
  • 가장 긴 변이 다른 두 변의 합보다 크거나 같으면 삼각형이 될 수 없으므로 "Invalid"를 출력합니다.
  • 그렇지 않은 경우 변들의 동일 개수를 세어 삼각형의 종류를 판단합니다.
  • 이 과정을 입력이 0 0 0이 나올 때까지 반복합니다.

Code

[ 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
26
using System;
using System.Linq;

class Program {
  static void Main() {
    while (true) {
      var tri = Console.ReadLine().Split().Select(int.Parse).ToArray();
      if (tri.All(x => x == 0)) break;

      Array.Sort(tri);

      if (tri[2] >= tri[0] + tri[1]) {
        Console.WriteLine("Invalid");
        continue;
      }

      var distinctCount = tri.Distinct().Count();
      if (distinctCount == 1)
        Console.WriteLine("Equilateral");
      else if (distinctCount == 2)
        Console.WriteLine("Isosceles");
      else
        Console.WriteLine("Scalene");
    }
  }
}



[ 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
26
27
28
29
30
31
#include <bits/stdc++.h>

using namespace std;
typedef vector<int> vi;

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

  while (true) {
    vi tri(3);
    for (int i = 0; i < 3; i++)
      cin >> tri[i];
    if (!tri[0] && !tri[1] && !tri[2]) break ;

    sort(tri.begin(), tri.end());

    int cnt = 0;
    for (int i = 1; i < 3; i++)
      if (tri[i] == tri[i - 1]) cnt++;

    if (tri[2] >= tri[0] + tri[1]) cout << "Invalid\n";
    else {
      if (!cnt) cout << "Scalene\n";
      else if (cnt == 1) cout << "Isosceles\n";
      else if (cnt == 2) cout << "Equilateral\n";
    }
  }

  return 0;
}