본문 바로가기
알고리즘/백준

백준 9036번 대지 [C++]

by seongjun 2023. 12. 6.

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

 

9063번: 대지

첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다. 

www.acmicpc.net

 

 

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    int n;
    cin >> n;
    int arr[n][2];
    for (int i=0;i<n;i++){
        cin >> arr[i][0] >> arr[i][1];
    }
    int xmin = arr[0][0];
    int xmax = arr[0][0];
    int ymin = arr[0][1];
    int ymax = arr[0][1];

    for (int i=0;i<n;i++){
        if(xmin > arr[i][0]){
            xmin = arr[i][0];
        }
        if (xmax < arr[i][0]){
            xmax = arr[i][0];
        }
        if (ymin > arr[i][1]){
            ymin = arr[i][1];
        }
        if (ymax < arr[i][1]){
            ymax = arr[i][1];
        }
    } 

    int answer = (xmax - xmin) * (ymax - ymin);
    cout << answer;
    
}

n개 만큼 좌표가 주어질 때, 이 좌표들을 둘러싸는 가장 작은 크기의 직사각형의 크기를 구하는 문제이다.

간단하게 생각해보면, 주어진 좌표들을 모두 둘러싸야 하므로,

가장 큰 x좌표 - 가장 작은 x좌표 == 가로 길이,

가장 큰 y좌표 - 가장 작은 y좌표 == 세로 길이

가 되는 것이다.