
내가 생각했을때 문제에서 원하는부분
첫째 줄에는 주요 고객들의 수 n이 주어진다.
다음 n줄에는 i번 고객의 위치 xi, yi가 주어진다.
모든 고객들의 거리 합을 최소로 하는 위치에 편의점을 세울 때, 그 최소 거리 합을 출력하시오.
내가 이 문제를 보고 생각해본 부분
입력을 모두 받고, x좌표와 y좌표를 분리해 배열에 저장한다.
두 배열을 각각 정렬하면 중앙값을 쉽게 찾을 수 있다.
n/2 인덱스의 값이 중앙값이며, 이 위치에서 모든 고객까지 거리 합을 계산한다.
거리는 절댓값 합으로 구하며, long 타입을 써서 큰 값도 안전하게 처리한다.
마지막으로 최소 거리 합을 출력한다.
코드로 구현
package baekjoon.baekjoon_33;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
// 백준 14400번 문제
public class Main1349 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] xs = new int[n];
int[] ys = new int[n];
for (int i = 0; i < n; i++) {
String[] parts = br.readLine().split(" ");
xs[i] = Integer.parseInt(parts[0]);
ys[i] = Integer.parseInt(parts[1]);
}
Arrays.sort(xs);
Arrays.sort(ys);
// 중앙값 구하기
int medianX = xs[n / 2];
int medianY = ys[n / 2];
long totalDistance = 0;
for (int i = 0; i < n; i++) {
totalDistance += Math.abs(xs[i] - medianX) + Math.abs(ys[i] - medianY);
}
System.out.println(totalDistance);
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.