본문 바로가기
Development/Baekjoon

[C#] 9063번: 대지

by Mobics 2025. 9. 24.

목차


    백준 단계별로 풀어보기

    25.09.24

    10단계: 기하 1: 직사각형과 삼각형


    9063번: 대지

    문제 링크 : https://www.acmicpc.net/problem/9063

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - N개의 점의 좌표로 직사각형을 구하는 방법

    : 입력 받은 N개의 점 중, x좌표의 최솟값과 최댓값 그리고 y좌표의 최솟값과 최댓값으로 네 꼭짓점을 삼으면 직사각형이 나온다.

    --> 아래 사진은 문제에 나와있는 예시이며, 예시에 나온 좌표는 각각 (2, 1), (3, 2), (5, 2), (3, 4)이다.

    • x좌표의 최솟값 : 2
    • x좌표의 최댓값 : 5
    • y좌표의 최솟값 : 1
    • y좌표의 최댓값 : 4

    >> 직사각형의 네 꼭짓점 : (2, 1), (5, 1), (2, 4), (5, 4)

    출처 : https://www.acmicpc.net/problem/9063

     

    ▶ 따라서 직사각형의 넓이는 (x최댓값 - x최솟값) × (y최댓값 - y최솟값) 이다.

     

    >> 풀이

    1. 주어질 점의 개수를 입력받아 int값으로 변환하고, x의 최댓값과 최솟값, y의 최댓값과 최솟값을 변수로 선언한다. 이때, 각각의 좌표는 -10,000 이상 10,000 이하의 정수임을 감안하여 값을 초기화한다.
    2. for 반복문을 통해 점의 개수만큼 반복하여 점의 좌표를 입력받아 각각 int값 x와 y로 변환하고 변환한 x와 y를 각각 x의 최댓값과 최솟값, y의 최댓값과 최솟값과 비교하여 대입해준다.
    3. 모든 좌표를 비교하여 x의 최댓값과 최솟값, y의 최댓값과 최솟값을 구했다면 공식을 통해 직사각형의 넓이를 출력한다.

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            int count = int.Parse(Console.ReadLine());
            int minX = 10001;
            int minY = 10001;
            int maxX = -10001;
            int maxY = -10001;
    
            for (int i = 0; i < count; i++)
            {
                string[] input = Console.ReadLine().Split();
                int x = int.Parse(input[0]);
                int y = int.Parse(input[1]);
                
                if (x < minX) minX = x;
                if (y < minY) minY = y;
                if (x > maxX) maxX = x;
                if (y > maxY) maxY = y;
            }
            Console.Write((maxX - minX) * (maxY - minY));
        }
    }