여러 개의 점으로 부터 거리의 합이 최소가 되는 지점을 찾는 것이므로, x값과 y값에 대해서 각각 정렬을 해주면 된다.
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int x[100001];
int y[100001];
int main(){
int n, m, p, q, ans=0;
cin>>n>>m;
for(int i=0; i<m; i++){
cin>>x[i]>>y[i];
} sort(x, x+m);
sort(y, y+m);
if(m%2==1){
p=x[(m-1)/2];
q=y[(m-1)/2];
} else {
p=(x[m/2]+x[m/2-1])/2;
q=(y[m/2]+y[m/2-1])/2;
}
for(int i=0; i<m; i++){
ans+=abs(x[i]-p)+abs(y[i]-q);
} cout<<ans;
}'알고리즘' 카테고리의 다른 글
| Boj 2310 c++ 어드벤처 게임 (0) | 2025.07.24 |
|---|---|
| Boj 14501 c++ 퇴사 (0) | 2025.07.20 |
| Boj 32069 c++ 가로등 (1) | 2025.07.20 |
| Boj 28325 c++ 호숫가의 개미굴 (2) | 2025.07.20 |
| Boj 1912 c++ 연속합 (0) | 2025.07.19 |