[BOJ][C#] 1064 평행사변형

LimJaeJun·2023년 11월 29일
0

PS/BOJ

목록 보기
53/108

📕 문제

📌 링크

📗 접근 방식

  • 입력받은 세개의 좌표들 사이의 거리를 각각 구한다.
  • 구한 거리를 이용하여 둘레를 구하여 리스트에 담는다.
  • 리스트의 최대값과 최소값의 차이를 출력한다.

📘 코드

namespace BOJ_1064
{
    class Program
    {
        static void Main()
        {
            using StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
            using StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
            List<double> list = new List<double>();
            
            int[] inputs = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
            
            // 세 점이 직선인지 판단
            if ((inputs[1] - inputs[3]) * (inputs[2] - inputs[4]) == (inputs[3] - inputs[5]) * (inputs[0] - inputs[2]))
            {
                sw.WriteLine("-1.0");

                return;
            }

            // 0 - 1 거리
            int dx1 = inputs[0] - inputs[2];
            int dy1 = inputs[1] - inputs[3];
            double line1 = Math.Abs(Math.Sqrt(dx1 * dx1 + dy1 * dy1));
            
            // 1 - 2 거리
            int dx2 = inputs[2] - inputs[4];
            int dy2 = inputs[3] - inputs[5];
            double line2 = Math.Abs(Math.Sqrt(dx2 * dx2 + dy2 * dy2));

            // 0 - 2 거리
            int dx3 = inputs[0] - inputs[4];
            int dy3 = inputs[1] - inputs[5];
            double line3 = Math.Abs(Math.Sqrt(dx3 * dx3 + dy3 * dy3));

            list.Add(line1 * 2 + line2 * 2);
            list.Add(line2 * 2 + line3 * 2);
            list.Add(line1 * 2 + line3 * 2);
            
            sw.Write(list.Max() - list.Min());
        }
    }
}

📙 오답노트

거리를 두가지 경우만 계산하여 풀었으며 길이는 음수가 없기에 Math.Abs()를 사용해야했지만 사용하지 않고 코드를 작성하였다.

📒 알고리즘 분류

  • 수학
  • 기하학
  • 피타고라스 정리
profile
Dreams Come True

0개의 댓글

관련 채용 정보