글 작성자: 취업중인 피터팬
728x90

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

 

9063번: 대지

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

www.acmicpc.net

 

문제 설명

 

좌표 값을 받아서 그 점으로 그릴 수 있는 최대 직사각형을 그리고 넓이를 구하는 문제입니다.

 

문제 풀이

 

해당 좌표를 받아 직사각형을 그리면 되는데 처음에는 어떻게 직사각형을 그려야 하는지 막막하실 수 있습니다.

손으로 좌표를 그려보고 직접 사각형을 그리다 보면 x의 최댓값과 최솟값 y의 최댓값과 최솟값이 사각형의 꼭지점으로 그려진다는 것을 알 수 있습니다.

해당 규칙을 발견했다면 구현은 어렵지 않습니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        int[] x = new int[n];
        int[] y = new int[n];

        for(int i=0; i<n; i++){
            x[i] = sc.nextInt();
            y[i] = sc.nextInt();
        }

        int min_x = x[0];
        int min_y = y[0];
        int max_x = x[0];
        int max_y = y[0];

        for(int i=0; i<n; i++){
            if(min_x > x[i]){
                min_x = x[i];
            }
            if(min_y > y[i]){
                min_y = y[i];
            }
            if(max_x < x[i]){
                max_x = x[i];
            }
            if(max_y < y[i]){
                max_y = y[i];
            }
        }

        if(n==1){
            System.out.println(0);
        }else{
            System.out.println((max_x-min_x)*(max_y-min_y));
        }
    }
}

1이 들어올 때만 넓이를 0으로 출력해주는것만 조심하면 풀 수 있는 문제입니다.