📌문제
임씨는 1950 년 한국전쟁으로 많은 손해를 본 사람들 중 하나다. ....
(문제중략) 실제로도 안 읽음..
예를 들어 위와 같이 (2, 1), (3, 2), (5, 2), (3, 4) 네 점에서 옥구슬을 발견하였다면, 임씨에게 돌아갈 대지는 (2, 1), (5, 1), (2, 4), (5, 4)를 네 꼭짓점으로 하는 직사각형이며, 넓이는 (5 - 2) × (4 - 1) = 9 가 된다.
입력
첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
출력
첫째 줄에 N 개의 점을 둘러싸는 최소 크기의 직사각형의 넓이를 출력하시오.
예제 입력
3
20 24
40 21
10 12
예제 출력
360
📌답
Idea) 문제를 요약해보면 주어진 좌표를 포함하는 가장 작은 남북, 동서 방향으로 평행한 변을 갖는 직사각형의 크기를 구하라는 뜻
-> 각 좌표를 두 개씩 짝지어 연결했을 때 x축의 최대 길이, y축의 최대길이를 가진 직사각형의 크기를 구하면 됨
즉, 좌표 중 (가장 큰 x의 값 - 가장 작은 y의 값) * (가장 큰 y의 값 - 가장 작은 y의 값)을 하면 된다.
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int n = readInt();
int[] a = new int[n*2];
int maxX = -10000;
int minX = 10000;
int maxY = -10000;
int minY = 10000;
int ans =0;
for(int i =0; i<n*2; i++) {
a[i]=readInt();
if(i%2==0) {
if (a[i] > maxX) maxX = a[i];
if (a[i] < minX) minX = a[i];
} else {
if (a[i] > maxY) maxY = a[i];
if (a[i] < minY) minY = a[i];
}
}
System.out.println( n>1 ? (maxX-minX)*(maxY-minY) : 0);
}
private static int readInt() throws IOException {
int r = 0;
boolean isNegative = false;
while(true) {
int n = System.in.read();
if(n<=32) return isNegative? r*(-1) : r;
else if (n=='-') isNegative=true;
else r = (r<<3) + (r<<1) + (n-'0');
}
}
}
끝까지 읽어주셔서 감사합니다 :)
Have a good day🐱
📢
1. 개발자 준비생이 공부한 내용을 정리한 글입니다. 내용에 오류가 있을 수 있습니다.
2. 위와 같은 이유로 내용에 대한 지적과 조언은 감사하게 받습니다.
3. 이 글의 내용은 계속 공부함으로써 언제든지 추가/수정 될 수 있습니다.
'Coding Test > 백준 - JAVA' 카테고리의 다른 글
백준 5073번 삼각형과 세 변 (JAVA) (0) | 2024.12.30 |
---|---|
백준 10101번 삼각형 외우기 (JAVA) (0) | 2024.12.30 |
백준 3009번 네 번째 점 (JAVA) (0) | 2024.12.30 |
백준 1085번 직사각형에서 탈출(JAVA) (1) | 2024.12.30 |
백준 11653번 소인수분해 (JAVA) (0) | 2024.12.30 |