반응형
🔺 문제
9063번: 대지
첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
www.acmicpc.net
🔺 코드
- 초기 풀이 (틀림)
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int[][] arr = new int[n][n];
for(int i=0 ; i < n ; i++) {
st = new StringTokenizer(br.readLine()," ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
int minX = arr[0][0];
int minY = arr[0][1];
int maxX = arr[0][0];
int maxY = arr[0][1];
for(int i=0 ; i < n ; i++) {
minX = Math.min(arr[i][0], minX);
maxX = Math.max(arr[i][0], maxX);
minY = Math.min(arr[i][1], minY);
maxY = Math.max(arr[i][1], maxY);
}
int result = Math.abs(maxY - minY) * Math.abs(maxX - minX);
System.out.println(result);
}
}
n개의 점을 둘러싸는 최소 크기 직사각형 넓이 구하는 문제!
위 코드로 원하는 결과가 나오긴 했다만 메모리 초과로 실패..
그래서 메모리 줄이는 법을 챗지피티에게 물어보고..
2차원 배열이 아닌 1차원 배열을 사용하자고 다짐..
- 정답 코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int[] arr1 = new int[n];
int[] arr2 = new int[n];
for(int i=0 ; i < n ; i++) {
st = new StringTokenizer(br.readLine()," ");
arr1[i] = Integer.parseInt(st.nextToken());
arr2[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr1);
Arrays.sort(arr2);
int minX = arr1[0];
int maxX = arr1[n-1];
int minY = arr2[0];
int maxY = arr2[n-1];
System.out.println((maxY - minY) * (maxX - minX));
}
}
✅ 해결 아이디어
- 각 값을 각각의 배열에 저장
-Arrays.sort()
이용해서 배열 오름차순 정렬
- 각 배열에서 0번째 원소가 최솟값, (배열 길이 -1)번째 원소가 최댓값이니까 이 값끼리 빼서 넓이 계산
🔺 다른 풀이들
[백준] 9063번 대지 Java 문제 풀이
문제풀이 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; interface Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBui
aorica.tistory.com
스트림과 삼항 연산자를 사용하신.. 멋진 풀이....
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 10810번: 공 넣기 (0) | 2023.03.30 |
---|---|
[백준/JAVA] 삼각형 외우기 (0) | 2023.03.29 |
[백준/JAVA] 1085번: 직사각형에서 탈출 (0) | 2023.03.29 |
[백준/JAVA] 11653번: 소인수분해 (0) | 2023.03.28 |
[백준/JAVA] 2581번: 소수 (0) | 2023.03.28 |