[BOJ][C#] 5073 삼각형과 세 변

LimJaeJun·2023년 11월 19일
0

PS/BOJ

목록 보기
39/108

📕 문제

📌 링크

📗 접근 방식

  • 입력으로 주어진 세 변의 길이를 정렬
  • 두 변의 길이의 합이 나머지 한 변의 길이보다 커야 한다. 이 조건을 만족하지 않으면 Invalid를 출력
  • 세 변의 길이가 모두 같으면 Equilateral을 출력
  • 두 변의 길이가 같은 것이 하나라도 있으면 Isosceles을 출력
  • 위의 경우가 모두 아니라면 Scalene를 출력

📘 코드

HashSet 자료구조 이용한 코드

using System.Text;

namespace BOJ_5073
{
    class Program
    {
        static void Main()
        {
            StringBuilder sb = new StringBuilder();
            HashSet<int> hashSet = new HashSet<int>();

            while (true)
            {
                int[] inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
                
                Array.Sort(inputs);

                hashSet.Clear();
                foreach (int input in inputs)
                {
                    hashSet.Add(input);
                }
                
                if (inputs.All(x => x == 0))
                {
                    break;
                }

                switch (hashSet.Count)
                {
                    case 1:
                        sb.AppendLine("Equilateral");

                        break;
                    case 2:
                        sb.AppendLine(IsTriangle(inputs[0], inputs[1], inputs[2]) ? "Isosceles" : "Invalid");

                        break;
                    case 3:
                        sb.AppendLine(IsTriangle(inputs[0], inputs[1], inputs[2]) ? "Scalene" : "Invalid");

                        break;
                }
            }

            Console.Write(sb);
        }

        static bool IsTriangle(int a, int b, int c) => a + b > c;
    }
}

HashSet 자료구조 이용하지 않은 코드

using System.Text;

namespace BOJ_5073
{
    class Program
    {
        static void Main()
        {
            StringBuilder sb = new StringBuilder();

            while (true)
            {
                int[] inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
                Array.Sort(inputs);
                
                int a = inputs[0];
                int b = inputs[1];
                int c = inputs[2];
                
                if (inputs.All(x => x == 0))
                {
                    break;
                }

                if (IsTriangle(a, b, c))
                {
                    if (a == b && b == c)
                    {
                        sb.AppendLine("Equilateral");
                    }
                
                    else if (a == b || b == c || c == a)
                    {
                        sb.AppendLine("Isosceles");
                    }

                    else
                    {
                        sb.AppendLine("Scalene");
                    }
                }
                else
                {
                    sb.AppendLine("Invalid");
                }
            }

            Console.Write(sb);
        }

        static bool IsTriangle(int a, int b, int c) => a + b > c;
    }
}

📙 오답노트

처음에 HashSet 자료구조를 이용하여 중복처리를 체크하였다.
HashSet의 크기가 2일때 삼각형의 조건두 변의 길이의 합이 나머지 한 변의 길이보다 커야 한다.를 체크하지 않아 틀렸다.

📒 알고리즘 분류

  • 수학
  • 구현
  • 기하학
profile
Dreams Come True

0개의 댓글

관련 채용 정보