본문 바로가기

알고리즘

Boj 7571 c++ 점 모으기

여러 개의 점으로 부터 거리의 합이 최소가 되는 지점을 찾는 것이므로, 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