C# 코딩테스트 강좌, 다각형의 면적 구하기

코딩 테스트에서 다각형의 면적을 구하는 문제는 알고리즘과 기하학에 대한 깊은 이해를 요구합니다. 이 글에서는 다각형의 면적을 계산하는 문제를 제시하고, 이를 해결하기 위한 접근 방법, 알고리즘, 코드 설명을 상세히 다룰 것입니다.

문제 설명

문제: 정다각형의 꼭짓점 좌표가 주어졌을 때, 이 다각형의 면적을 구하는 프로그램을 작성하시오. 각 꼭짓점은 시계방향 또는 반시계방향으로 연결된 순으로 주어진다. 좌표는 2차원 평면에서 표현된다.

입력: 첫째 줄에 정점의 개수 n (3 ≤ n ≤ 1000)이 주어진다. 그 다음 n개의 줄에 각 정점의 x, y 좌표가 주어진다.

출력: 마지막 줄에 소수점 아래 두 자리까지 반올림한 면적을 출력한다.

문제 풀이 접근 방법

다각형의 면적을 구하는 알고리즘 중 하나는
쇼벨(Shoelace) 공식을 이용하는 방법입니다. 이 방법은 다각형의 꼭짓점 좌표가 주어졌을 때, 해당 면적을 효율적으로 계산할 수 있습니다. 이 방법은 시계방향 또는 반시계방향으로 연결된 다각형의 꼭짓점에서 면적을 구하는 공식을 기반으로 합니다.

면적 계산 공식은 다음과 같습니다:

        Area = 0.5 * | Σ (xi * yi+1 - yi * xi+1) |
    

여기서 i는 0부터 n-1까지의 정수이며, (xn, yn)는 (x0, y0)로 연결됩니다. 이 공식을 통해 다각형의 면적을 쉽게 계산할 수 있습니다.

C# 구현 단계

이제 주어진 알고리즘을 C#으로 구현해보겠습니다. 구현 단계는 다음과 같습니다:

1. 입력 처리

가장 먼저, 사용자로부터 다각형의 꼭짓점 개수와 각 꼭짓점의 좌표를 입력받습니다.

2. 면적 계산

쇼벨 공식을 이용하여 입력된 좌표로 면적을 계산합니다.

3. 결과 출력

계산된 면적을 소수점 아래 두 자리까지 반올림하여 출력합니다.

코드 구현

        
        using System;

        class Program
        {
            static void Main(string[] args)
            {
                int n = int.Parse(Console.ReadLine());
                double[,] points = new double[n, 2];

                // 좌표 입력 받기
                for (int i = 0; i < n; i++)
                {
                    string[] input = Console.ReadLine().Split();
                    points[i, 0] = double.Parse(input[0]);
                    points[i, 1] = double.Parse(input[1]);
                }

                double area = CalculatePolygonArea(points, n);
                Console.WriteLine("{0:F2}", Math.Abs(area));
            }

            static double CalculatePolygonArea(double[,] points, int n)
            {
                double area = 0;

                for (int i = 0; i < n; i++)
                {
                    int next = (i + 1) % n;  // 다음 점의 인덱스
                    area += points[i, 0] * points[next, 1];
                    area -= points[next, 0] * points[i, 1];
                }

                return area * 0.5;  // 면적
            }
        }
        
    

코드 설명

포인트 정의: 입력받은 좌표를 저장하기 위해 2D 배열 points를 선언합니다.
좌표 입력: for 루프를 통해 사용자로부터 x, y 값을 입력받습니다.
면적 계산: CalculatePolygonArea 메서드에서 쇼벨 공식을 통해 면적을 계산합니다. 각 꼭짓점의 좌표를 사용하여 면적을 구하고, 마지막으로 0.5를 곱하여 최종 면적을 반환합니다.
출력: 면적을 소수점 아래 두 자리까지 출력합니다. Math.Abs() 함수를 사용하여 면적이 부정적인 경우에도 항상 양의 면적을 출력합니다.

예제

입력 예시:
4
0 0
4 0
4 3
0 3
출력 예시:
12.00

위의 예시에서는 사각형의 면적을 계산하는 것으로 0,0에서 시작하여 4,0으로 가고, 4,3으로 이어지며, 마지막으로 0,3으로 돌아오는 정사각형을 형성합니다. 해당 사각형의 면적은 4*3=12가 됩니다.

마무리

이번 글에서는 C#을 사용하여 다각형의 면적을 계산하는 방법을 배워보았습니다. 다각형 면적 계산 문제는 다양한 코딩 테스트에서 자주 출제되는 문제이며, 알고리즘적 사고를 기를 수 있는 좋은 기회입니다. 알고리즘 문제를 풀 때는 항상 다양한 접근 방식을 생각해보는 것이 중요합니다. 다음 시간에는 다른 알고리즘 문제를 통해 더 많은 경험을 쌓아가길 바랍니다.