Notice
Recent Posts
Recent Comments
Link
HwangHub
[완전탐색/자바] 코드트리. 가장 가까운 두 점 사이의 거리 본문
기본적으로 두 좌표 사이의 거리의 제곱을 구하는 문제이므로 피타고라스 정리를 이용할거기 때문에 맨해튼 거리를 활용하고자 했다.
1차 시도 : 실패
실수했던 점은, 맨해튼 거리로 구하는 과정에서 답을 도출하기 전에 좌표간의 x거리와 y거리가 둘다 더 작은 경우에만 더 짧은 거리가 나올 거라고 가정한 것이다. 이제와서 생각하면 당연하게도, x거리가 기존에 구해둔 비교 대상의 거리보다 길어도 y거리가 현저히 짧으면 두 점 사이의 거리는 더 작아질 수 있다. 이를 간과하고 로직을 설계했었다.
2차 시도 : 성공
package 코드트리.완전탐색.물체탐색;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 가장_가까운_두점_사이의_거리 {
/*
주어진 모든 점을 완전 탐색하여 두 점을 선정
두 점 사이의 거리를 맨해튼 방식으로 구하고
ans = Math.min(ans, xMin**2 + yMin ** 2) 구하기
**/
private static int[][] arr;
private static int ans = Integer.MAX_VALUE;
private static int n;
private static final int X_COOR = 0;
private static final int Y_COOR = 1;
private static final int COOR_SIZE = 2;
public static void main(String[] args) throws IOException {
initCoordinates();
findMinXY();
System.out.println(ans);
}
private static void findMinXY() {
for (int i = 0; i < n; i++) { // i : 첫번째 점
for (int j = i + 1; j < n; j++) { // j : 두번째 점
int x1 = arr[i][X_COOR];
int y1 = arr[i][Y_COOR];
int x2 = arr[j][X_COOR];
int y2 = arr[j][Y_COOR];
int res = (int) (Math.pow(Math.abs(x2-x1), 2) + Math.pow(Math.abs(y2-y1), 2));
ans = Math.min(ans, res);
}
}
}
private static void initCoordinates() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
arr = new int[n][COOR_SIZE];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
arr[i] = new int[]{Integer.parseInt(st.nextToken()),
Integer.parseInt(st.nextToken())};
}
br.close();
}
}
'workspace > 알고리즘' 카테고리의 다른 글
[자바/해시맵] 코드트리 IM: 낮은 지점들 - int의 범위 (0) | 2023.07.28 |
---|---|
[자바/해시맵] 코드트리 IM: 두 수의 합 (0) | 2023.07.28 |
[자바/완전탐색] CodeTree. 밭의 넓이를 고르게 하기 (0) | 2023.07.19 |
[코드트리/자바] NM.시뮬2.만나는 그 순간 (0) | 2023.07.12 |
[코드트리/자바] mid.simulation1.잔해물을 덮기 위한 사각형의 최소 넓이 (0) | 2023.07.11 |
Comments