
내가 생각했을때 문제에서 원하는부분
Line 1: A single integer: N
Lines 2..N+1: Line i+1 contains the integer coordinate location of cow i: X_i and Y_i
Line 1: Two sorted integers that are the indices of the two cows that are located farthest apart.
내가 이 문제를 보고 생각해본 부분
먼저 BufferedReader와 StringTokenizer를 사용해 입력을 받는다.
좌표를 각각 X[i], Y[i] 배열에 1번부터 저장한다.
0번은 사용하지 않고 1부터 인덱스를 맞춘 이유는 문제에서 소의 번호가 1부터 시작하기 때문이다.
모든 소 위치를 입력받은 뒤, 서로 다른 모든 쌍 (i,j)에 대해 2중 반복문으로 거리를 계산한다.
거리 계산은 좌표 차이를 제곱해 더한 값을 Math.sqrt로 루트를 씌워 구했다.
최대 거리보다 큰 거리를 발견하면 값을 갱신하고, 해당 소들의 번호도 cow1, cow2에 저장한다.
반복문이 끝난 후 두 소의 번호를 오름차순으로 맞춰 출력한다.
문제에서 가장 멀리 떨어진 두 소의 결과가 항상 유일하기 때문에 최대 거리만 비교하면 충분하다.
코드로 구현
package baekjoon.baekjoon_34;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 백준 6013번 문제
public class Main1360 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] X = new int[N + 1];
int[] Y = new int[N + 1];
for (int i = 1; i <= N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
X[i] = Integer.parseInt(st.nextToken());
Y[i] = Integer.parseInt(st.nextToken());
}
double maxDist = -1;
int cow1 = 1, cow2 = 2;
for (int i = 1; i <= N; i++) {
for (int j = i + 1; j <= N; j++) {
double dist = Math.sqrt(Math.pow(X[i] - X[j], 2) + Math.pow(Y[i] - Y[j], 2));
if (dist > maxDist) {
maxDist = dist;
cow1 = i;
cow2 = j;
}
}
}
// 출력 시 오름차순으로 정렬해서 출력
if (cow1 < cow2) {
System.out.println(cow1 + " " + cow2);
} else {
System.out.println(cow2 + " " + cow1);
}
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.